日期:2014-05-16  浏览次数:20836 次

UDP Socket 关闭操作请教
Hi:all:
  请教一个问题,请指教:
  创建一个Udp Socket(例如为gSocket),完成了一次发包以及相应的收包,然后就关闭了套接字(close(gSocket))。
  后续,在这个gSocket上依然可以发包成功(sendto),但是却无法收包(recvfrom)。所以请教一下,对于Udp类型的socket的close操作实现了什么效果:为什么关闭后,可以依旧在这个socket上发包成功,但是收包却失败呢,请高手指教。

  编程环境为(linux suse) & g++

------解决方案--------------------
Linux下面的不知道
WIndows下面closesocket(gSocket)之后还有两个操作:
1. closehandle(handle) // 关闭句柄
2. WSACleanup() // 把DLL清出去
------解决方案--------------------
我是这样理解的,发出去只是从本地发出去成功了,并不表示到达目的的,且对方接收成功。

就好像我本来是要去汽车南站的,我从家里出去了,但是并不表示我一定能到达南站呀,假如迷路或....。

所以发送成功与接收成功完全是两个相互独立的事件,并没有任何必然联系。
------解决方案--------------------
引用:
引用:我是这样理解的,发出去只是从本地发出去成功了,并不表示到达目的的,且对方接收成功。

就好像我本来是要去汽车南站的,我从家里出去了,但是并不表示我一定能到达南站呀,假如迷路或....。

所以发送成功与接收成功完全是两个相互独立的事件,并没有任何必然联系。

多谢回复,现在测试的结果是:
包成功发出去了,对方也成……



具体实现了什么,我也没有研究过。你只要保证程序的逻辑是正确的就好了,太细的不需要研究。
按正常操作步骤来就好了。
------解决方案--------------------
你确定close socketfd 后在发送数据服务器端还能接受到数据?你在close后面加个延时函数试试,然后在发送数据,看看服务器端还能接受到数据么? 我测试着这包数据没有到达服务器端.