【问题标题】:Unity3d c# TCP client code can't receive second message in a rowUnity3d c# TCP客户端代码无法连续接收第二条消息
【发布时间】:2012-12-27 09:10:38
【问题描述】:

我有类似的问题可能和here一样。

来自服务器(Java TCP 服务器)我正在这样做:

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

【问题讨论】:

    标签: unity3d tcpclient tcpserver tcpsocket


    【解决方案1】:

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

    这就是发生的事情:

    1. 所有数据都已发送。

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

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

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

    【讨论】:

    • 我如何检查是否有数据并在消息完整时接收?还连续多条消息?
    • 我只是删除了检查“if(theStream.DataAvailable) {}”但是当我运行统一客户端时,应用程序冻结,直到我杀死服务器......我正在尝试这个“字符串数据 = sr.ReadLine(); 打印(数据);"在 update() 方法中
    • 我建议使用线程来等待数据。这是最简单的方法。其他方式更复杂——您必须自己进行生产线处理、保存剩菜等。
    • 你有什么例子吗?我如何创建一个线程并等待来自服务器的消息。
    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2013-09-26
    相关资源
    最近更新 更多