为什么第一次不转化数据,而是从对方发送的第二次开始才转化呢

.Net技术 码拜 8年前 (2016-09-14) 941次浏览
先描述一下情况  服务端发送AA   本人不选中checkHewView   显示AA   然后再选中十六进制显示  服务器发送BB    第一下显示BB 之后就是42 42了   各位高手知道问题出在哪里吗   下面附源码

 while (true)
            {
                if (checkHewView.Checked)
                {         
                    byte[] buffer = new byte[1024 * 1024];
                    int n = client.Receive(buffer);
                    string word = Encoding.UTF8.GetString(buffer, 0, n);
                    char[] values = word.ToCharArray();
                    string words = null;
                    foreach (char letter in values)
                    {
                        int value = Convert.ToInt32(letter);
                         words = String.Format("{0:X}", value);
                         ShowMsg(words);
                    }
                   // ShowMsg(word);
                }
                else
                {
                    //通信用Socket
                    try
                    {
                        byte[] buffer = new byte[1024 * 1024];
                        int n = client.Receive(buffer);
                        string words = Encoding.UTF8.GetString(buffer, 0, n);
                        ShowMsg(words);
                    }
解决方案

40

1、代码

string word = Encoding.UTF8.GetString(buffer, 0, n);
char[] values = word.ToCharArray();
string words = null;
foreach (char letter in values)
{
    int value = Convert.ToInt32(letter);
    words = String.Format("{0:X}", value);
    ShowMsg(words);
}

可直接改成

string word = BitConverter.ToString(buffer).Replace("-", " ");
ShowMsg(words);

2、估计收不到数据会阻塞在client.Receive(buffer);处,选中checkHewView时已经在else里了,收到第一次还是非十六进制显示
3、把client.Receive(buffer);放在if之前应该不会出问题了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么第一次不转化数据,而是从对方发送的第二次开始才转化呢
喜欢 (0)
[1034331897@qq.com]
分享 (0)