我有一個大問題......我們有一個關于學校和工作的項目。我編寫了 go 服務器,我的伙伴編寫了 java 客戶端。我有一個問題,如果他發(fā)送類似“Hello World”的內(nèi)容,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)}}廣播功能只是對所有連接執(zhí)行 conn.Write(msg) 。有誰知道問題出在哪里?編輯:我發(fā)現(xiàn)了問題。Java 在每個單詞后添加一個 \r\n。然后 go server 認為消息結束了。我們現(xiàn)在切換到 c#。在使用 bufferedWriter 寫入套接字時,它更容易并且工作正確。
2 回答

楊__羊羊
TA貢獻1943條經(jīng)驗 獲得超7個贊
您可能需要先發(fā)送要讀取的字節(jié)數(shù),然后再發(fā)送要使用 io.ReadFull 函數(shù)讀取的字節(jié)...這樣您就可以確定讀取了所有字符串...
在 go https://golang.org/pkg/io/https://golang.org/pkg/io/ 中閱讀全文
ReadFully Java 與 DataInputStream :https://docs.oracle.com/javase/8/docs/api/
首先讀取 int 的字節(jié)數(shù)....
稍后使用 io.ReadFull 方法讀取字節(jié)...
注意:您需要將 bigendianess 中的整數(shù)寫入 java。
binary.Write(tx, binary.BigEndian, value)
我的建議是讓復雜的 go 和 read int 和 readFull 字節(jié)在 java 中......
注意:如果您需要發(fā)送圖像或類似的東西,您只能在兩個方向上簡單地寫入字節(jié)......
我希望這有幫助...
- 2 回答
- 0 關注
- 166 瀏覽
添加回答
舉報
0/150
提交
取消