C# 使用“发送TCP数据包到服务器时”;简单TCP“;,这些小包正聚在一起
当使用简单的TCP发送数据包时,这些数据包会聚集在一起 首先,我运行以下代码:C# 使用“发送TCP数据包到服务器时”;简单TCP“;,这些小包正聚在一起,c#,C#,当使用简单的TCP发送数据包时,这些数据包会聚集在一起 首先,我运行以下代码: PacketSender.ValidateLogin(); PacketSender.GetProfileInfo(); PacketSender.GetFriendships(); PacketSender.GetFriendRequests(); 以下是功能: public static void ValidateLogin() { string Packet = string.Format(&qu
PacketSender.ValidateLogin();
PacketSender.GetProfileInfo();
PacketSender.GetFriendships();
PacketSender.GetFriendRequests();
以下是功能:
public static void ValidateLogin()
{
string Packet = string.Format("{0} {1} {2} {3}", "validateLogin", LocalData.ClientID, LocalData.Username, LocalData.Password);
Client.Send(Packet);
}
public static void GetProfileInfo()
{
string Packet = string.Format("{0} {1} {2} {3} {4}", "getProfileInfo", LocalData.ClientID, LocalData.Username, LocalData.Password, TempData.CurrentProfileOwnerUsername);
Client.Send(Packet);
}
public static void GetFriendships()
{
string Packet = string.Format("{0} {1} {2} {3} {4}", "getFriendships", LocalData.ClientID, LocalData.Username, LocalData.Password, TempData.CurrentProfileOwnerUsername);
Client.Send(Packet);
}
public static void SendFriendRequest()
{
string Packet = string.Format("{0} {1} {2} {3} {4}", "sendFriendRequest", LocalData.ClientID, LocalData.Username, LocalData.Password, TempData.CurrentProfileOwnerUsername);
Client.Send(Packet);
}
这是“客户端”类“发送”函数:
private SimpleTcpClient Client_;
public void Send(string Packet)
{
try
{
Task.Run(() => Client_DataSend(Packet));
}
catch
{
MessageBox.Show("Error while communicating with the server.", "Psychonuts");
Application.Exit();
}
}
void Client_DataSend(string Packet)
{
Client_.Connect("127.0.0.1", Convert.ToInt32(2181));
Client_.WriteLineAndGetReply(Packet, TimeSpan.FromSeconds(1));
Client_.Disconnect();
}
这来自服务器日志,显示数据包正在一起参与:
Received: getFriendships pQxIr9d/HUyUHbzD/4JfIA admin admin admingetProfileInfo pQxIr9d/HUyUHbzD/4JfIA admin admin adminvalidateLogin pQxIr9d/HUyUHbzD/4JfIA admin admin
Sent: getFriendships accountIsntExist
Received: getProfileInfo pQxIr9d/HUyUHbzD/4JfIA admin admin adminvalidateLogin pQxIr9d/HUyUHbzD/4JfIA admin admin
Sent: getProfileInfo accountIsntExist
我希望我发送的每个数据包都要分开
发生了什么,导致了什么,以及如何修复它,非常感谢您的帮助。TCP是一种流协议,而不是数据包协议。任何包级语义都发生在应用层(第7层)之外。这意味着在任何TCP协议中,您都需要添加自己的“帧”。对于基于文本的协议,这通常意味着一个终结者哨兵,通常只是CR/LF的一些组合。对于二进制协议,这通常意味着在一些可预测的头中添加长度前缀。这适用于两个方向