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

linux下udp通信
udp通信中  
第一种情况:
服务器端和客户端绑定客户端的ip或服务器端的ip(绑定一个ip就可以) 进行通信
第二种情况:
服务器端绑定客户端的ip 客户端绑定服务器的ip 进行通信
哪种情况对啊 谢谢

------解决方案--------------------
你距离真正理解TCP/IP太远了...

你绑定ip=0, 那么内核允许所有网卡可用, 比如socket用于监听的, 那么所有网卡来的包都可被该socket检测到. 再比如socket用于发送, 那么发送的包将根据目标IP所属子网从正确的网卡送出.

而如果你绑定了IP!=0, 监听的只能监听到从这张网卡来的请求. 再比如, 你发送包只能从这张网卡发出, 如果目标IP不在这个网段内或者这张网卡没有设置默认网关, 那发送就是失败的.

当然如果你是发包而不是监听,IP根本不需要绑定,与绑定0是一样的效果。

你绑定port=0, 那么内核立即帮你绑定一个port。于是你就可以监听在这个port上了,所有请求这个port的包当然可以被监听。再比如你发包,就是以这个port作为源port。

你绑定port!=0,那么就是你自己指定port上监听。再比如你发包,就是以这个port为源port。

你根本不绑定port,那么你没法监听。再比如你要发包,那么你发包那一刻内核就给绑定了一个port,以后你收发数据包都是这个port了。
------解决方案--------------------
udp 根本不需要绑定ip
可以使用sendto 和recvfrom进行收发数据。