【问题标题】:When sending TCP Packets to the server with "Simple TCP", the Packets are getting involved together使用“Simple TCP”向服务器发送 TCP 数据包时,数据包一起参与
【发布时间】:2021-05-16 19:10:54
【问题描述】:

当使用简单 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

我希望为我发送的每个数据包分开数据包 发生了什么并导致它以及如何解决它,感谢任何帮助。

【问题讨论】:

    标签: c#


    【解决方案1】:

    TCP 是流协议,而不是数据包协议。任何数据包级别的语义都发生在应用层(第 7 层)之外。这意味着在任何 TCP 协议中,您都需要添加自己的“框架”。对于基于文本的协议,这通常意味着终结符标记,通常只是 CR/LF 的某种组合。对于二进制协议,这通常意味着在一些可预测的标头中添加长度前缀。这适用于两个方向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多