从socket

时间:2018-06-13 12:32:48

标签: c# sockets

我有一个设备模拟器,它接受来自socket的文本数据.Below代码正常工作,直到我从0x00 to 0x7F发送到Ascii限制(0到127)。 当我尝试发送超出Ascii限制(如0x80,0x81)时会出现问题。它发送到仿真器0x3F('?')并改变命令的全部含义。因为它无法理解这一点。

那么发送数据超出Ascii限制的可能解决方案

发送数据代码:

 //string data = textBox1.Text;
 string d1 = ConvertHex("35");  //getting exact byte in socket             
 byte[] buffer = Encoding.ASCII.GetBytes(d1);
 clientStream.Write(buffer, 0, buffer.Length);
 clientStream.Flush();

ConverHex功能:

public static string ConvertHex(String hexString)
    {
        try
        {
            string ascii = string.Empty;

            for (int i = 0; i < hexString.Length; i += 2)
            {
                String hs = string.Empty;

                hs = hexString.Substring(i, 2);
                uint decval = System.Convert.ToUInt32(hs, 16);
                char character = System.Convert.ToChar(decval);
                ascii += character;

            }

            return ascii;
        }
        catch (Exception ex) { Console.WriteLine(ex.Message); }

        return string.Empty;
    }

1 个答案:

答案 0 :(得分:3)

  

但是当我发送的内容超过79时,我会在模拟器中获得3F

7F实际上是上限。因为它是十进制的127,是ASCII编码支持的最高代码点。代码点高于解码为问号的代码点,代码点为633F十六进制。

那是因为您正在使用文本来传输二进制数据。不要那样做。有关“十六进制字符串到字节数组”的正确实现,请参阅How can I convert a hex string to a byte array?