当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《发送两个字符串,但通过tcp接收一个》经验,为你挑选了1个好方法。

Hy家伙,这就是我的客户端和服务器代码的样子:

客户:

         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();

我正在尝试将用户名和密码作为字符串从客户端发送到服务器,但问题是我在服务器端收到两个字符串,存储在"message"中.我知道不知怎的,我应该认识到第一个字符串的结束并放入第一个数组,然后从那里开始并将另一个放入第二个数组,但我不知道该怎么做.我想问你是否可以帮我解决这个问题.



1> Jon Skeet..:

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

在每条消息后写一个分隔符

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

后者是我通常喜欢的 - 它意味着你在开始阅读之前总是知道你需要读取多少数据,这意味着你可以告诉你什么时候完成,你知道在你之前分配的数组大小也开始阅读.哦,这也意味着没有必要逃避任何事情,而如果你有一个可能在消息中自然出现的分隔符,则需要转义.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有