socket获取本机地址地址与获取连接者地址信息

TCP

对于服务器来说,在bind以后就可以调用getsockname来获取本地地址和端口。getpeername只有在连接建立以后才调用,否则不能正确获得对方地址和端口,所以他的参数描述字一般是连接描述字而非监听套接口描述字。

对于客户端来说,在调用socket时候内核还不会分配IP和端口,此时调用getsockname不会获得正确的端口和地址(当然链接没建立更不可能调用getpeername),当然如果调用了bind 以后可以使用getsockname。想要正确得到对方地址(一般客户端不需要这个功能),则必须在链接建立以后,同样链接建立以后,此时客户端地址和端口就已经被指定,此时是调用getpeername的时机。

================================

UDP

UDP分为连接和没有连接2种(这个到UDP与connect可以找到相关内容)

没有连接的UDP不能调用getpeername,但是可以调用getsockname,和TCP一样,它的地址和端口不是在调用socket就指定了,而是在第一次调用sendto函数以后

已经连接的UDP,在调用connect以后,这2个函数都是可以用的(同样,getpeername也没太大意义。如果你不知道对方的地址和端口,不可能会调用connect)。

发布了56 篇原创文章 · 获赞 18 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/iMatt/article/details/94721379