gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:47 26 4
gpt4 key购买 nike

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

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

通过 wireshark,我发现 web 服务将接受一个输入流(认为它是十六进制)并返回第二个。包含我需要的数据的十六进制流。

因此桌面应用正在发送一个流Wireshark 显示何时:

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

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

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

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

干杯,乔

最佳答案

套接字传输不应该关心,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);

如果可行,则输出“编码”数组可以检查以确保它包含在发送数据包中,然后验证接收到的是什么。如果您正在发送正确的数据但接收到的数据已损坏,那么您会遇到严重的问题……我怀疑您会发现这一点,但如果是这样,请编写一个非常简单的测试程序,在同一台机器(本地主机)上发送和接收以查看它是否可重复。

如果非要我猜的话,我会说编码的字符不是 Unicode,或者 Win 手机不支持它 (Proper unicode support)。

关于C# 将十六进制字符串发送到 tcp 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19076803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com