【发布时间】:2016-05-11 07:56:01
【问题描述】:
我有一个大问题...... 我们有一个关于学校和工作的项目。 我编写了 go 服务器,我的伙伴编写了 java 客户端。 我有一个问题,如果他发送类似“Hello World”的内容,golang 服务器会将其拆分为“Hello”和“World”
Java 代码:
public class DataController {
public String recieveDataFromServer(Socket socket) throws Exception {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (!bufferedReader.ready()) { }
String data = bufferedReader.readLine();
return data;
}
public void sendDataToServer(Socket socket, String data) throws Exception
{
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.println(data);
}
}
围棋代码:
func handleRequest(conn net.Conn) {
request := make([]byte, 256)
for {
_, err := conn.Read(request)
if err != nil {
Error.Println(err.Error())
return
}
Info.Println("Message Received: " + string(request))
message := []byte(time.Now().String())
message = append(message, []byte(": ")...)
message = append(message, request...)
broadcast(message)
}
}
广播函数只是对所有连接执行 conn.Write(msg)。
有谁知道问题出在哪里?
编辑:我发现了问题。 Java 在每个单词后添加一个 \r\n。然后 go server 认为消息结束了。我们现在切换到 c#。使用 bufferedWriter 写入套接字时,它更容易且工作正确。
【问题讨论】:
-
根据所附图片,您正在发送两个单独的字符串,Go 您正在按预期接收这些字符串(两个单独的字符串)。
-
Conn.Read()在找到换行符之前不会读取,它可以读取介于0和传递的切片长度之间的任意字节数(参见io.Reader)。您可以使用bufio.Scanner阅读整行。 -
但我将消息作为一个字符串发送。这是我在 Java 端调用 sendDataToServer 的代码 System.out.println("Geben sie eine Nachricht ein:");字符串消息 = in.next(); dataController.sendDataToServer(socket, message);收到的字符串 = dataController.recieveDataFromServer(socket); System.out.println("服务器:"+收到);我也尝试使用 bufio.Scanner,但我的解决方案没有奏效。同样的问题。
标签: java sockets go server client