注册 登录
编程论坛 Delphi论坛

delphixe下socket API失效,该如何解决

ukton11123 发布于 2013-11-07 22:26, 2345 次点击
将原delphi7项目升级后,引用了新的Winapi.WinSock,发现UDP的sendto等函数发送数据后,对方无法接受到数据,但函数返回值正常,请教
6 回复
#2
wp2319572013-11-08 09:19
看看
#3
ukton111232013-11-08 09:31
编译都可以通过,我测试了XE3和XE5均可编译成功,但对方全都收不到数据,同样的测试代码delphi7下就可以正常运行,这是为什么呢,请高手赐教
#4
wp2319572013-11-08 09:33
不好意思  没用过xe3 和xe5

你可以用getlasterror看一下关键函数返回值  看是否调用成功
#5
ukton111232013-11-08 09:35
发送数据函数代码
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;
#6
wp2319572013-11-08 09:39
if sendto(FMainSocket, ABuffer, ABufferCount, 0, FRemotAddr, SizeOf(FRemotAddr)) <> ABufferCount then
    begin

      Exit;
    end;
改一下 试试

m:=sendto(FMainSocket, ABuffer, ABufferCount, 0, FRemotAddr, SizeOf(FRemotAddr));
n:=getlasterror();
这里跟踪调试一下 看看n等于多少  百度一下 大概就知道错误在哪里了
初步怀疑这个sendto函数调用失败
if m<> ABufferCount then
    begin

      Exit;
    end;


#7
ukton111232013-11-08 09:47
没有错误,返回0的
1