gpt4 book ai didi

c# - 通过 tcp 拆分消息

转载 作者:太空狗 更新时间:2023-10-29 21:32:51 24 4
gpt4 key购买 nike

我在 uni 项目中遇到了一些麻烦。我从 C++ 客户端向 C# 服务器发送一条 tcp 消息,服务器分两部分接收它。有可能阻止它吗?我输出在我的客户端发送的数据,所有数据都在 1 件中,所以不可能是这样。这是我的 OnReceiveData 方法:

void OnReceiveData(IAsyncResult result){
try{
int readbytes = myStream.EndRead(result);
if (readbytes <= 0){
//client is not connected to the server anymore
CloseSocket();
return;


byte[] newBytes = new byte[readbytes];
Buffer.BlockCopy(readBuff, 0, newBytes, 0, readbytes);
myStream.BeginRead(readBuff, 0, readbytes, OnReceiveData,
null);
string output =
System.Text.Encoding.ASCII.GetString(newBytes, 0,
readbytes);
Text.WriteLog(output);

ServerHandleData.HandleData(connectionID, newBytes);
}
catch (Exception e)
{
Text.WriteError("Error Code: " + e);
CloseSocket();
}
}

谢谢!

最佳答案

不,没有办法“阻止它”, TCP 就是这样工作的。

简而言之,由于 TCP 是流式传输,因此没有消息边界。它只是一个连续的字节流。

要在数据之间实现某种消息传递或边界,则需要提出自己的应用层协议(protocol)以置于 TCP 之上。例如,您可以引入某种消息边界标记、特殊字符、字节或字符/字节序列,表示当前消息已结束。或者您可以发送一个固定大小的消息 header ,其中包含实际消息数据的大小。

然后在接收时需要循环接收,直到检测到消息结束。为此,最简单的方法是使用具有数据长度的固定大小的 header ,然后您只需尝试读取( header 或数据的)长度,减少每次迭代接收的字节数,直到没有更多接收(接收字节数达到零)。

关于c# - 通过 tcp 拆分消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53615181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com