我正在制作一个聊天室应用程序,我发送TCP数据包以便在服务器和客户端之间进行通信。
我有以下代码:
string returnMessage = "[EVT]USERSUCCESS";
bytes = Encoding.ASCII.GetBytes(returnMessage);
info.WriteToStream(bytes);
foreach (ConnectionInfo con in connections)
{
info.WriteToStream(bytes);
bytes = Encoding.ASCII.GetBytes("[EVT]USERJOIN;" + username);
con.WriteToStream(bytes);
}
但是,当客户端读取此内容时,响应为:
这似乎是在同时接收两个数据包..?
这是我收到的代码:
static void ServerListener()
{
while (true)
{
byte[] bytes = new byte[1024];
int numBytes = stream.Read(bytes, 0, bytes.Length);
string message = Encoding.ASCII.GetString(bytes, 0, numBytes);
if (HandleResponse(message) && !WindowHasFocus())
{
player.Play();
}
}
}
哪个作为单独的线程运行。 HandleResponse()完全正常工作。
提前致谢!
答案 0 :(得分:3)
Tcp是流协议而不是数据包协议。
你可以获得多个数据包中的字节或像你一样的单个数据包。
你需要做的是放一个字符串来表示数据包的结尾(例如空字节)
Psudeo代码:
高级TCP: