繁体   English   中英

发送两个字符串,但通过tcp接收一个

[英]sending two strings , but receiving one over tcp

大家好,这是我的客户端和服务器代码的样子:

客户:

         TcpClient client = new TcpClient();
         client.Connect(IPAddress.Parse("192.168.1.12"), 5004);
         NetworkStream stream = client.GetStream();

         string username = loginName_txt.Text;
         byte[] message = Encoding.ASCII.GetBytes(username);
         stream.Write(message, 0, message.Length);
         loginName_txt.Clear();

         string password = password_txt.Text;
         byte[] message1 = Encoding.ASCII.GetBytes(password);
         stream.Write(message1, 0, message1.Length);
         password_txt.Clear();

         stream.Close();
         client.Close();

服务器:

        TcpClient mClient = (TcpClient)client;
        NetworkStream stream = mClient.GetStream();

        byte[] message = new byte[1024];
        int recv = stream.Read(message, 0, message.Length);
        username = Encoding.ASCII.GetString(message, 0 , recv);
        updateUI("Username: " + Encoding.ASCII.GetString(message, 0, recv));

        byte[] message1 = new byte[1024];
        int recv1 = stream.Read(message1, 0, message1.Length);
        password = Encoding.ASCII.GetString(message1, 0, recv1);
        updateUI("Password: " + Encoding.ASCII.GetString(message1, 0, recv1));

        stream.Close();
        mClient.Close();

我正在尝试将用户名和密码作为字符串从客户端发送到服务器,但是问题是我在服务器端将两个字符串作为一个字符串接收,并存储在“消息”中。 我知道我应该以某种方式识别第一个字符串的结尾并放入第一个数组,然后从那开始,然后将另一个放入第二个数组,但是我不知道该怎么做。 我想问你是否可以帮助我解决这个问题。

问题是您正在使用基于流的协议(TCP / IP),就好像它是基于消息的协议一样。 不是。 这里有一些选项,但最简单的是:

  • 在每条消息后写一个定界符
  • 在每条消息之前写一个长度前缀(消息中的字节数)

后者是我通常所喜欢的-这意味着您在开始读取数据之前始终准确知道需要读取多少数据,这意味着您可以知道何时完成操作,并且知道要分配多少数组大小。也开始阅读。 哦,这也意味着没有必要转义任何内容,而如果您有一个分隔符,该分隔符很可能在消息中自然出现,则需要转义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM