getsockname()和getpeername()

对于server端:

以端口为通配符方式bind:对于服务器,bind(0,ip),则调用bind函数之后,就可以调用getsockname获取服务器得到的本地端口号

以ip地址为通配地址bind,只有accept返回之后,调用getsockname(connfd,......)才会返回服务器得到的本地ip地址

对于client端:

由于不绑定bind,所以当connect()函数成功之后(完成三次握手),可以调用getsockname可以得到本地端口号和ip地址

getpeername():

server调用accept()之后,再调用exec,要获取客服端的套接字地址结构,只能通过调用getpeername(connfd, (struct sockaddr *)&peerAddr, &peerLen);

时间: 2024-12-18 21:53:11

getsockname()和getpeername()的相关文章

利用 getsockname 和 getpeername 来获取某一个链接的本地地址和远端地址

在两台计算机上建立一个网络连接,需要五个要素:本机地址 本机端口 协议类型 远端端口 远端地址.那么如何从一个建立好的连接上获取这些信息呢.就需要用到 getsockname  和 getpeername 这两个函数. 但前提是要在建立好的连接上. 作为客户端,要在正确调用connect()之后,才能使用这两个函数 作为服务端,要在正确调用accept()之后,才能使用这两个函数 以下为测试代码, windows/linux 下均可编译运行. #include <stdint.h> #incl

UNIX网络编程——getsockname和getpeername函数

UNIX网络编程——getsockname和getpeername函数 来源:网络转载   http://www.educity.cn/linux/1241293.html 这两个函数或者返回与某个套接字关联的本地协议地址(getsockname),或者返回与某个套接字关联的外地协议地址即得到对方的地址(getpeername). #include <sys/socket.h> int getsockname(int sockfd,struct sockaddr* localaddr,sock

getsockname和getpeername函数

这2个函数或者返回与某个套接字关联的本地协议地址(getsockname),或者返回与某个套接字关联的外地协议地址(getpeername) int getsockname(int sockfd, struct sockaddr* localaddr, socklen_t * addrlen); int getpeername(int sockfd, struct sockaddr * peeraddr, socklen_t * addrlen); 这2个函数的最后一个参数都是值-结果参数,这就

关于getsockname()/getpeername()函数第一次被调用得到0.0.0.0结果的说明

最近阅读UNIX网络编程第四章时,书本末尾介绍了两个函数getsockname()和getpeername(),可以用于获取服务器端和客户端的IP地址与端口,原本很简单的两个函数,过一眼即明白函数的用法,但在实际编程测试中,却出现了一个让人意外的结果,这两个函数在第一个客户连接时解析出的IP地址和端口全部为0,出乎我的期望.而在后面的客户连接时,打印出的IP地址和端口却是正确的. 下面先给出客户端和服务端的代码: 客户端: #include <netinet/in.h> #include &l

getsockname函数与getpeername函数的使用

getsockname和getpeername函数 getsockname函数用于获取与某个套接字关联的本地协议地址 getpeername函数用于获取与某个套接字关联的外地协议地址 定义如下: #include<sys/socket.h> int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen); int getpeername(int sockfd, struct sockaddr *peerad

套接字之 getsockname &amp;&amp; getpeername

getsockname-获取本地地址:比如,在绑定的时候设置端口号为0由系统自动选择端口绑定,或者使用了INADDR_ANY通配所有地址的情况下,后面需要用到具体的地址和端口,就可以用getsockname获取地址信息: getpeername-获取建立连接的对端的地址和端口: 下面为源码分析: 1 /* 2 * Get the local address ('name') of a socket object. Move the obtained 3 * name to user space.

C++ Socket 学习笔记

Socket学习笔记 以下均为整理,做参考之用. IP Address IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异. IP地址被用来给Internet上的电脑一个编号.大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信.我们可以把"个人电脑"比作"

socket编程——一个简单的例子(转)

原文地址:http://blog.csdn.net/wind19/article/details/6156339 从一个简单的使用TCP例子开始socket编程,其基本步骤如下: server                                                  client +++++++                                          ++++++++ 创建socket                               

《TCP/IP详解卷2:实现》笔记--UDP:用户数据报协议

用户数据报协议,即UDP,是一个面向数据报的简单运输层协议:进程的每次输出操作只产生一个UDP数据报,从而发送 一个IP数据报. 进程通过创建一个Internet域内的SOCK_DGRAM类型的插口,来访问UDP.该类型插口默认地称为无连接的.每次进程发送 数据时,必须指定目的IP地址和端口号.每次从插口上接收数据报时,进程可以从数据报中收到源IP地址和端口号. UDP插口也可以被连接到一个特殊的IP地址和端口,这样,所有写到该插口的数据报都被发往该目的地,而且只有来自该IP 地址和端口号的数据