Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用“发送TCP数据包到服务器时”;简单TCP“;,这些小包正聚在一起_C# - Fatal编程技术网

C# 使用“发送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

当使用简单的TCP发送数据包时,这些数据包会聚集在一起

首先,我运行以下代码:

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的一些组合。对于二进制协议,这通常意味着在一些可预测的头中添加长度前缀。这适用于两个方向