WSAStartup(MAKEWORD(2,2), WSA);          
s:=WSASocketA(AF_INET, SOCK_RAW, IPPROTO_RAW,0, 0, 0); 
bOpt := 1;
setsockopt(s,IPPROTO_IP, IP_HDRINCL,@bOpt, SizeOf(bOpt));
sendto(s,sendbuffer,SizeOf(sendbuffer),0,server,sizeof(server));先创建原始套接字,再设置了IP_HDRINCL选项,再用sendto 发数据包...按道理说,sendto发送的数据应跟IP头里设置的源IP目标IP相符合,跟server结构里的设置应无关..
可是我在调试的时候,发现,这个server结构:server.sin_family:=AF_INET;                      
server.sin_port:=htons(80);      
server.sin_addr.S_addr:=inet_addr(pchar('1.1.1.1')); 对sendto发送是有影响的,有时会根本没有数据包出来.为什么??   请高手指点一下!
我的环境是,100m网卡+ADSL拨号上网..

解决方案 »

  1.   

    我是初学者,感觉仅仅指定了IP是不够的,也要告诉它你使用什么协议AF_INET(IP协议),什么端口:80(http的端口,这个一般想上网的人都不会拦的); 这样你的数据才能发出去,人家才知道在那个端口接受。乱说了一下,还是等高手来指教吧。     
      

  2.   

    你的服务器地址有问题,你是不是没看相关的API文档就开始做了,建议看看《Windows 网络编程》,里面有具体讲API创建原始套接字的。