所以我在这里遇到了这个问题,我使用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);
}
}
我希望自己清楚明白
答案 0 :(得分:1)
因此,在接收方,在一个recv
中,您将获得从另一端发送的所有数据。
您应该了解TCP的一点是它不保持消息边界。它实际上不知道什么是"消息"是。它是一个字节流协议。这里有三个send
可以在另一端产生三个recv
,或者在另一端产生一个recv
,以便完全交换数据。
使用TCP的应用程序应构建"消息" TCP正在移交给他们。 TCP只是确保数据按发送顺序给出,并尽力传送发送到接收器的数据包。应用程序协议可以定义应该对数据执行的操作。