【问题标题】:Socket not receiving both messages from server (almost at same time)套接字未从服务器接收两条消息(几乎同时)
【发布时间】:2017-01-19 12:50:46
【问题描述】:

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

我希望我说清楚了

【问题讨论】:

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

标签: sockets haxe openfl


【解决方案1】:

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

关于 TCP,您应该了解的一件事是它不维护消息边界。它实际上不知道什么是“消息”。它是一个字节流协议。此处的三个sends 可以在另一端产生三个recv,甚至在另一端产生一个recv,以进行完整的数据交换。

使用 TCP 的应用程序应该根据 TCP 传递给它们的内容构建“消息”。 TCP 只是确保数据按照发送的顺序给出,并尽最大努力将发送的数据包传递给接收者。由应用程序协议来定义应该如何处理数据。

【讨论】:

    猜你喜欢
    • 2018-09-24
    • 2021-03-30
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多