套接字没有收到来自服务器的消息(几乎同时)

时间:2017-01-19 12:50:46

标签: sockets haxe openfl

所以我在这里遇到了这个问题,我使用openfl.net.Socket连接我的服务器并从中接收消息。 问题是服务器几乎同时发送两条消息,我的套接字看起来只读一条,我试着在第二条消息上放一个断点,然后在它停止后释放它(如0.5秒的睡眠),等等我的客户收到这两条消息,但几乎同时发送两封消息我只得到一封...提示?

socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse);
function onResponse(e:ProgressEvent):Void
    {
        trace("response");
        if (socket.bytesAvailable > 0)
        {
            var size:Int = socket.readInt();
            var domainId:Int = socket.readInt();
            var messageId:Int = socket.readInt();
            var count:Int = socket.readInt();

            var socketData:String = socket.readUTFBytes(socket.bytesAvailable);
            trace("RECEIVE: " + socketData);

            var message:Message = Message.JSONToMessage(socketData);
            Domain.processMessage(message);
        }
    }

我希望自己清楚明白

1 个答案:

答案 0 :(得分:1)

因此,在接收方,在一个recv中,您将获得从另一端发送的所有数据。

您应该了解TCP的一点是它不保持消息边界。它实际上不知道什么是"消息"是。它是一个字节流协议。这里有三个send可以在另一端产生三个recv,或者在另一端产生一个recv,以便完全交换数据。

使用TCP的应用程序应构建"消息" TCP正在移交给他们。 TCP只是确保数据按发送顺序给出,并尽力传送发送到接收器的数据包。应用程序协议可以定义应该对数据执行的操作。