Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 套接字未从服务器接收两条消息(几乎同时接收)_Sockets_Haxe_Openfl - Fatal编程技术网

Sockets 套接字未从服务器接收两条消息(几乎同时接收)

Sockets 套接字未从服务器接收两条消息(几乎同时接收),sockets,haxe,openfl,Sockets,Haxe,Openfl,所以我在这里遇到了这个问题,我使用一个openfl.net.Socket来连接我的服务器并从中接收消息。 问题是服务器几乎同时发送两条消息,而我的套接字似乎只读取一条消息,我尝试在第二条消息上设置断点,并在它停止后释放它,就像睡眠0.5秒一样,因此我的客户端接收两条消息,但几乎同时发送两条消息,我只收到一条。。。小费 socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse); function onResponse(e:Prog

所以我在这里遇到了这个问题,我使用一个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);
        }
    }

我希望我说得很清楚

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

关于TCP,您应该知道的一件事是它不维护消息边界。它实际上不知道什么是信息。这是一个字节流协议。此处的三次发送将导致另一端有三个recv,甚至另一端有一个recv,用于完全交换数据


使用TCP的应用程序应该根据TCP交付给它们的内容构造消息。TCP只是确保数据按发送顺序发送,并尽力将数据包发送给接收方。由应用程序协议定义应如何处理数据。

当您只收到一条消息时,大小是多少?是发送的两条信息的总和吗?是的,是!!好极了!!我如何解决它?