将原delphi7项目升级后,引用了新的Winapi.WinSock,发现UDP的sendto等函数发送数据后,对方无法接受到数据,但函数返回值正常,请教

解决方案 »

  1.   

    在XE下,注意Char和AnsiChar的区别
    你在D7下写的Char到XE下就变成了WideChar
      

  2.   

    这个不是问题,编译都可以通过,我测试了XE3和XE5均可编译成功,但对方全都收不到数据,同样的测试代码delphi7下就可以正常运行,这是为什么呢,请高手赐教
      

  3.   

    发送数据函数代码
    function TMySocket.SendUDPData(ARemoteIP: string; ARemotePort: Word; var ABuffer;
      ABufferCount: integer): Boolean;
    var
      FRemotAddr: TSockAddrIn;
    begin
      Result := false;
      try    FRemotAddr.SIn_Family := AF_INET;
        FRemotAddr.sin_addr.s_addr := inet_addr(pansichar(ARemoteIP));
        FRemotAddr.sin_port := htons(ARemotePort);
        if sendto(FMainSocket, ABuffer, ABufferCount, 0, FRemotAddr, SizeOf(FRemotAddr)) <> ABufferCount then
        begin      Exit;
        end;
      except
      end;
      inc(SendCount);
      inc(SendSize, ABufferCount);  Result := true;
    end;
      

  4.   

    没用过xe 听说了解过
    xe下 也许要强调ARemoteIP: string改ansistring吧  
    你后面都有inet_addr(pansichar(ARemoteIP));