C#向tcp套接字发送十六进制字符串

C#向tcp套接字发送十六进制字符串,c#,sockets,stream,request,C#,Sockets,Stream,Request,我正在尝试向tcp套接字发送十六进制字符串。我对这个字符串的格式或转换有一些问题,因为我不太确定它使用的是什么格式 我已经编写了一个WindowsPhone应用程序,它基于Socket类运行良好。 此应用程序模拟请求,这些请求通常从桌面程序发送到承载Web服务的设备 通过wireshark,我发现Web服务将接受输入流(以十六进制表示)并返回第二个。包含我需要的数据的十六进制流 因此,桌面应用程序正在发送流 Wireshark会在以下情况下显示: 数据(8字节) 数据:62ff03fff0057

我正在尝试向tcp套接字发送十六进制字符串。我对这个字符串的格式或转换有一些问题,因为我不太确定它使用的是什么格式

我已经编写了一个WindowsPhone应用程序,它基于Socket类运行良好。 此应用程序模拟请求,这些请求通常从桌面程序发送到承载Web服务的设备

通过wireshark,我发现Web服务将接受输入流(以十六进制表示)并返回第二个。包含我需要的数据的十六进制流

因此,桌面应用程序正在发送流 Wireshark会在以下情况下显示:

数据(8字节) 数据:62ff03fff00574600 长度:8

现在我已经尝试了很多来重现这条流。我想,它曾经是一个UTF8字符串,并将此流转换为这种格式。但每次我发送它时,都会在Wireshark中看到以下输出:62c3bf03c3bf00574600

据我调查,62=b,但ff发送总是c3bf

有人知道如何以正确的格式发送此流吗

干杯,
Jo

套接字传输不应该在意,TCP数据包的内容是二进制的,表示“无论什么”。 根据您在评论中指出的代码:

byte[] payload = Encoding.UTF8.GetBytes(data);
socketEventArg.SetBuffer(payload, 0, payload.Length);
...
response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
response = response.Trim('\0');
在套接字发送/接收的末尾(数据==响应)。如果没有发生这种情况,你需要弄清楚问题出在哪里。第一步是编写一些非常简单的代码,如下所示:

string source = "your problem text string";
byte[] encode = Encoding.UTF8.GetBytes(source);
target = Encoding.UTF8.GetString(encode, 0, encode.Length);
Debug.Assert(source == target);
如果可以,那么输出“encode”数组可以检查以确保它包含在发送的数据包数据中,然后验证这是接收的数据包。如果您发送的数据正确,但接收到的数据已损坏,则会出现严重问题。。。我怀疑您是否发现了这一点,但如果是这样,请编写一个非常简单的测试程序,在同一台机器(localhost)上发送和接收数据,以查看它是否可重复


如果我不得不猜测,我会说编码的字符不是Unicode,或者Win phone不支持它()。

只要您不知道服务器期望的协议/编码,您只能重播已知的消息,如您在问题中提供的字节

因此,您只需像这样直接定义字节数组:

byte[] payload = new byte[] {0x62, 0xff, 0x03, 0xff, 0xf0, 0x05, 0x74, 0x60};

并通过套接字发送它,就像您以前处理编码字符串一样。服务器现在应该接受您嗅探的客户端发送的消息。

您能否显示一些代码表示,说明发送数据的内容和方式,以及作为响应得到的内容和输出内容?代码几乎与此处的M$示例完全相同。从十六进制到字符串转换后发送的数据过去类似于字符串:bÿÿ所以,格式化似乎可以工作。那我真的。。。结果=client.Send(sendString);其中sendString是bÿÿ。然后,示例中的send方法执行从字符串到有效负载的转换,其中有效负载是字节数组(byte[]payload=Encoding.UTF8.GetBytes(data))。这将通过套接字连接发送到设备。但是,问题是,当我在wireshark中解析数据时,这些0x00ff并没有转换为ÿ,而是转换为c3bf。有什么想法吗?附言:因为服务器设备无法识别发送的数据,它会返回我ERR1,这表明,这是Wireshark中的通信:`000000 20 62 ff 03 ff 00 57 46 00 000000 6E e2 ff 03 ff 00 00 00 00 00 00 00 1d 00 000000 28 62 ff 03 ff 00 45 58 00 000000 7D e2 ff 03 ff 00 a0 ee d3 00 bc 00 000000 30 62 ff 03 ff 00 00 9d 00 000000 88 e2 ff 03 ff 00 a5 b4 0000 c4 00 000000 38 62 ff 03 ff 00 43 5a 00 000000 93 e2 ff 03 ff 00 00 00 00 00 00 00 00 000000 A3 00 00 00 00 00 00 00 00 00 00 00 00 000000 B3 00 00 00 00 00 00 00 00 00 00 00 00 00 000000 C3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00。服务器不是问题所在。请求处理得很好,但发送的数据不正确。当我调试应用程序时,我可以看到,有效负载得到了它的数据数组,其中包含我等待的数据,但问题仍然存在,我曾经发送62 ff 03 ff,但它使用
编码.Unicode.GetBytes(data)
执行0062 00ff 0003 00ff。因此,最后,服务器不理解请求,其响应ERR1完全正常。我的应用程序收到此响应并显示它。那也行。