远端是一工控机,使用UDP协议向外传输数据,我知道它的ip地址和端口号。
需要我向它发送控制字符(16进制码),它才向我返回数据。我用nmudp能实现吗?
 比如,我要向它发 16进制的 0x0a 0x0b 0x0c 该如何写?
 返回的数据还有什么CRC16校验的东西。
各位高手给点建议吧。

解决方案 »

  1.   

    学习,只听过通过串口进行CRC校验
      

  2.   

    这个问题很简单吗,你是只发一帧还是发多帧呀,你就用不同的控制就行了,CRC16校验就是2个字节的CRC校验
      

  3.   

    远端的工控机的协议我已经获得。
    但是听对方说,我和他之间的数据传输要先建立连接,但是UDP又是一个无连接的协议,很难理解啊,我试着用UDPsocket写了个程序,去连接远端时没有报错,但是我向它发要求数据的控制字符后,就没有回应了,那位大侠给小弟指条名路走吧
      

  4.   

    所说的连接是Socket连接,你可以问对方是否收到你发的数据,我觉得用Indy比较好
      

  5.   

    其实完全不需要连接的,UDP本身就是一个无连接的协议。
    已经搞定了
      

  6.   

    有效率比较高的读流数据进行CRC16校验的例子吗,谁有给他100分
      

  7.   

    /循环冗余校验(对于固定数组,dstart可以从1开始,dEnd为数组长度,对于动态数组dstart必须从0开始,
    //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,你自己可以试一试,其实不难的
      

  8.   

    我的VCL internet 怎么会找不到socket控件!