关于原始套接字的问题!

yaowei_2002 2008-01-12 01:19:29
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拨号上网..
...全文
51 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
好像没那么简单,呵呵.
回复
Bear_hx 2008-01-26
你的服务器地址有问题,你是不是没看相关的API文档就开始做了,建议看看《Windows 网络编程》,里面有具体讲API创建原始套接字的。
回复
小风哥哥 2008-01-18
我是初学者,感觉仅仅指定了IP是不够的,也要告诉它你使用什么协议AF_INET(IP协议),什么端口:80(http的端口,这个一般想上网的人都不会拦的); 这样你的数据才能发出去,人家才知道在那个端口接受。乱说了一下,还是等高手来指教吧。
回复
yaowei_2002 2008-01-12
请问高手在哪里啊?????
回复
yaowei_2002 2008-01-12
请问高手在哪里啊???
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1565

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告