socket编程请教

nizainade 2007-08-07 02:46:45
需要实现这样的功能,向远程主机发送ping数据包,根据返回的包判断是否是通的。现在实现的思路是接受和发送分开处理,先把测试包全部发送出去,等了一段时间后开始接受分析。我的问题是,完成这个功能需要用到socket的什么函数,如果发送包直接用sendto的话,那么接受的时候尽管ip是通的,但是recvfrom函数为什么总是提示超时?
...全文
289 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nizainade 2007-08-13
  • 打赏
  • 举报
回复
我这好像就是测试的ip多了的话,就有一些ip的包收不到,是不是可以分开接受?
Cricketol 2007-08-12
  • 打赏
  • 举报
回复
我也遇到类似情况
包大了也不能正常接受
只是一闪数据就不见了
希望高人来替LZ解答
我也学习点
nizainade 2007-08-11
  • 打赏
  • 举报
回复
现在问题解决了一些,在ip少的情况下,发送出去的包能够正确返回,但是ip增大到几百个的时候,又出现了上述问题,就是有些现实是通的ip但是却没接受到包。
我的问题是,在有大量的包到来的时候,recvfrom这个函数能不能正确接受到发送过来的每个包,会不会出现丢包的现象?
davidwuwuwu 2007-08-07
  • 打赏
  • 举报
回复
发送create bind connect send
接受create bingd recv

select等IO处理是后话了
rsp19801226 2007-08-07
  • 打赏
  • 举报
回复
bind,WSAAsyncSelect试试,我对网络也不熟,大家一起研究嘛.
nizainade 2007-08-07
  • 打赏
  • 举报
回复
ouyh12345(五岭散人),我这里不是面向连接的,不需要connect和listen吧,是不是要在bind之后才能接受?
ouyh12345 2007-08-07
  • 打赏
  • 举报
回复
1、刚建立的socket当然是不能读的
要进行连接操作(connect、listen)以后,才能用select判断是否有连接、读、写等请求

2、不一定
nizainade 2007-08-07
  • 打赏
  • 举报
回复
接受的代码是这样的:
WSADATA wsa;
WSAStartup(MAKEWORD(2, 1), &wsa);

OCKET sockRaw = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, 0);

fd_set fds;
FD_ZERO(&fds);
FD_SET(socket, &fds);
int nStatus = select(0, &fds, NULL, NULL, &timeout);

调试发现问题在select函数,上面select函数返回的是0,所以就是超时的。那么请问:

1。刚建立的socket为什么是不可读的?

2。发送和接受数据是不是要bind端口才可以?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧