远端是一工控机,使用UDP协议向外传输数据,我知道它的ip地址和端口号。
需要我向它发送控制字符(16进制码),它才向我返回数据。我用nmudp能实现吗?
比如,我要向它发 16进制的 0x0a 0x0b 0x0c 该如何写?
返回的数据还有什么CRC16校验的东西。
各位高手给点建议吧。
需要我向它发送控制字符(16进制码),它才向我返回数据。我用nmudp能实现吗?
比如,我要向它发 16进制的 0x0a 0x0b 0x0c 该如何写?
返回的数据还有什么CRC16校验的东西。
各位高手给点建议吧。
但是听对方说,我和他之间的数据传输要先建立连接,但是UDP又是一个无连接的协议,很难理解啊,我试着用UDPsocket写了个程序,去连接远端时没有报错,但是我向它发要求数据的控制字符后,就没有回应了,那位大侠给小弟指条名路走吧
已经搞定了
//dEnd为数组长度-1,目前Crc校验利用动态数组,所以dStart必须从0开始,dEnd为数组长度-1)
function TDataDeal.CRCCode(var Data:Array of Byte; dStart,dEnd: integer): word;
Var
CRC16 : word;
CalValue : word;
d0 : byte;
i,j : integer;
Begin
CRC16 := 0;
for i := dStart to dEnd do
begin
d0 := Data[i];
CalValue := d0 shl 8;
for j := 0 to 7 do
begin
if (CRC16 xor CalValue) and $8000 > 0 then
CRC16 := CRC16 shl 1 xor $1021
else
CRC16 := CRC16 shl 1;
CalValue := CalValue shl 1;
end;
end;
Result := CRC16;
End;
你说的通讯的东西如果是要建立连接的,不能使用udp,但是不用连接的话用udp也行,收到东西后分析了,如果争取就返回了,组织通讯数据是十分简单的东西,你看看书就能明白,你可以建立一个Byte的数组,把要发的东西放在这个数组里面,然后发出去,数据就直接写了啊,如a:array[1..5] of byte;
a[1] = $0a,你自己可以试一试,其实不难的