1

我有类似的问题,可能和这里一样。

从服务器(Java TCP Server)我这样做:

public void sendMsg(String msg) {

    out.println(msg); // msg is: "MSG Hello" without quetes

    out.flush();

}

当我推它两次或更多次时,我只收到客户端代码中的第一条消息,即 unity3d 代码 c# 套接字

void Update() {

    if(connected) {

        try {

            if(theStream.DataAvailable) {

                String data = sr.ReadLine();
// bla bla
4

1 回答 1

1

摆脱if(theStream.DataAvailable). 您无法以这种方式检查数据是否可用,因为如果您已经收到数据,则它不可用。虽然该ReadLine函数只向您返回一行,但它可能读取的内容远不止一行。

所以这就是发生的事情:

  1. 发送所有数据。

  2. 数据可用,您调用ReadLine。它读取所有数据并向您返回一行。

  3. 现在没有可用的数据,因为它已经从连接中读取。

该检查还有其他问题。如果它试图避免ReadLine在线路不可用时调用,它不会那样做。某些数据可用并不意味着整行可用。(想象一下,如果另一端恶意只发送一个X字节。)

于 2012-12-26T22:59:10.573 回答