winsock.dll,发送和接收IP数据包,用bind绑定端口和SetSockOpt修改IP数据包失败?(100)

  • 主题发起人 主题发起人 x_h_2
  • 开始时间 开始时间
X

x_h_2

Unregistered / Unconfirmed
GUEST, unregistred user!
windows xp.delphi 6.0采用winsock发送和接收IP数据包 初始化时,用bind绑定端口(0)和地址(本机),用SetSockOpt修改IP数据包头,为什么总有一个初始化返回失败?function Tcap_ip.text(var str : string): Boolean;var addr: TSockAddrIn; TempWSAData: TWSAData; ret,ttl,l_ttl,bOpt:integer; s_server : TSocket;begin Result:=False; ret:=WSAStartup($202, TempWSAData); //但看winsock版本是2.0 if ret<>0 then Exit; s_server:=socket(AF_INET , SOCK_RAW , IPPROTO_IP); if s_server=INVALID_SOCKET then begin str := 'ERROR:'+inttostr(GETLAstERROR); exit; end; //设置修改IP报头,成功 bOpt := 1; ret:=SetSockOpt(s_server,IPPROTO_IP,IP_HDRINCL, @bOpt, SizeOf(bOpt)); if ret<>0 then begin showmessage('ERROR:'+inttostr(GETLAstERROR)); exit; end; //绑定端口, ZeroMemory(@addr,sizeof(addr)); addr.sin_family:=AF_INET; addr.sin_port:=htons(0); addr.sin_addr.S_addr := Inet_addr(pchar('192.0.0.1')); //???失败。如先bind后setsockopt前可成功,后失败 ret:=bind(s_server,addr,sizeof(addr)); if ret<>0 then begin showmessage('ERROR:'+inttostr(GETLAstERROR)); Exit; end; ret:=listen(s_server,5); if ret<>0 then Exit; ret:=WSAAsyncSelect(s_server,FWindowHandle,WM_CapIp,FD_Read OR FD_ACCEPT OR FD_CLOSE); Result:=ret=0; }end;
 
addr.sin_addr.S_addr := Inet_addr(pchar('192.0.0.1'));不是本机IP。
 
我已解决,我在网上下载了winsock2.pas,可以了!谢谢大家
 

Similar threads

I
回复
0
查看
677
import
I
I
回复
0
查看
1K
import
I
I
回复
0
查看
552
import
I
I
回复
0
查看
603
import
I
后退
顶部