2012-12-26 33 views
1

我有类似的问题,可能像here一样。Unity3d c#TCP客户端代码不能连续接收第二条消息

从服务器(Java的TCP服务器)IM这样做:

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 

回答

1

摆脱if(theStream.DataAvailable)。您无法检查数据是否可用,因为如果您已收到数据,则无法使用。虽然ReadLine函数仅向您返回一行,但它可能读取的行数多于一行。

所以这里发生了什么:

  1. 所有数据发送。

  2. 有数据可用,请致电ReadLine。它读取所有数据并将一行返回给您。

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

该检查还存在其他问题。如果尝试避免在线路不可用时拨打ReadLine,则不会这样做。有些数据可用并不意味着整条线是。 (想象一下,如果另一端恶意发送一个单一的X字节。)

+0

我该如何检查是否有数据并收到完整消息时?也连续多个消息? –

+0

只需调用'ReadLine'。 –

+0

我只是删除检查“if(theStream.DataAvailable){}”但当我运行统一客户端的应用程序frezee,直到我杀死服务器...我试图“String data = sr.ReadLine();打印(数据);”在update()方法 –

相关问题