提问人:Gabriel Jefferson 提问时间:9/12/2022 更新时间:9/12/2022 访问量:49
c# BeginSend / BeginReceive 未接收相同数量的数据
c# BeginSend / BeginReceive not receiving the same amount of data
问:
我正在尝试使用 C# 中的异步套接字编写聊天应用程序。 我面临的问题是,当客户端运行命令列出登录服务器的用户时,服务器应将列表发送给客户端,然后客户端将更新列表。 问题是客户端没有从服务器接收全部数据。 然后,当将数据转换为已处理数据的形式(即字符串)时,它不能,并且就像数据为 null 一样。
当服务器收到“List”命令时,它会发回带有消息的“List”命令。
服务器代码的片段:
case Data.Command.List:
//Send the names of all users in the chat room to the new user
msgToSend.cmdCommand = Data.Command.List;
msgToSend.strMessage = null;
msgToSend.strName = null;
//Collect the names of the user in the chat room
foreach (Cliente client in clientes)
{
//To keep things simple we use asterisk as the marker to separate the user names
msgToSend.strMessage += client.strName + "*";
}
// DEBUG: The server is setting the message correctly
Console.WriteLine(msgToSend.cmdCommand);
Console.WriteLine(msgToSend.strMessage);
Console.WriteLine(msgToSend.strName);
message = msgToSend.ToByte();
// DBEUG: Printing on the screen the array of data that is being sent to the client.
foreach (var item in message)
{
Console.WriteLine(item);
}
//Send the name of the users in the chat room
clientSocket.BeginSend(message, 0, message.Length, SocketFlags.None,
new AsyncCallback(OnSend), clientSocket);
break;
}
当我检查服务器发送的数据和客户端接收的数据时,数组是不同的。
我上次
运行服务器的示例:
3
0
0
0
0
0
0
0
9
0
0
0
77
101
117
85
115
101
114
49
42
客户: 3 0 0 0 8 0 0 0 0 0 0 0 77 101 117 85 115 101 114 49
将 Data 转换为字符串的类的一部分:
public Data(byte[] data)
{
//The first four bytes are for the Command
this.cmdCommand = (Command)BitConverter.ToInt32(data, 0);
//The next four store the length of the name
int nameLen = BitConverter.ToInt32(data, 4);
//The next four store the length of the message
int msgLen = BitConverter.ToInt32(data, 8);
//This check makes sure that strName has been passed in the array of bytes
if (nameLen > 0)
this.strName = Encoding.UTF8.GetString(data, 12, nameLen);
else
this.strName = null;
//This checks for a null message field
if (msgLen > 0)
this.strMessage = Encoding.UTF8.GetString(data, 12 + nameLen, msgLen);
else
this.strMessage = null;
}
我不知道为什么客户端接收的数据少于服务器发送的数据。 有什么帮助吗?
答: 暂无答案
评论
Receive
async
await
Begin
End