读书人

关于16进制UDP发送有关问题。特急

发布时间: 2013-10-22 16:17:03 作者: rapoo

关于16进制UDP发送问题。特急!!!
有这么12个00 0a e0 00 84 04 34 00 35 00 36 00十六进制字符(不是字符串),我现在要用UDPclient发送给对方,不知怎样定义他,之前COM串口我是这样作的(sendstr16:=#$00#$0a#$e0#$00#$84#$04#$34#$00#$35#$00#$36#$00;然后发送即可)没有问题,但在UDP中却不行了idudpclient1.Send(pchar(sendstr16)),解析出来却是字符串。对方接收到的根本不是00 0a e0 00 84 04 34 00 35 00 36 00十六进制字符而是把他看成字符串了,接到了28个字节本来只有12个。不好意思,没有分了,之后我补上
[解决办法]
楼主 用的 D版本几啊? Indy版本几啊?

你用idudpclient1.Send 把数据当字符串发,当数据中有 #$00 它就当字符串结束了,于是数据变短了,当不遇到 #$00 时,它就一直往后找到#$00为止,于是数据变长了。
看楼主现象,数据变长了,应该用的 是默认宽字符版 的 Delphi 。
idudpclient1 肯定有别的发送函数可以调用的啊,我这 idudpclient1.SendBuffer 是传 TIdBytes 类型的参数,你将数据定义到 TIdBytes 再发试试。

实在不行,直接winsock2-API的sendto ,肯定可以。
[解决办法]
SendBuffer 啊,非常简单的事情啊
[解决办法]

var
RxBuf:TIdBytes;
begin
RxBuf := Idglobal.RawToBytes(DM.uUDPBroadcastingBuf, SizeOf (DM.uUDPBroadcastingBuf));
//idpclnt.Send('192.168.1.255',7890,'oushengfen'); {测试数据}
idpclnt.SendBuffer('50.255.255.255',8888,RxBuf);

读书人网 >.NET

热点推荐