- 论坛徽章:
- 0
|
我在服务端 对已经建立的socket句柄 分别使用getpeername和getsockname函数,然后将他们的ip和端口打印出来。
getpeername获取对端的ip和端口,都正确。
但是使用getsockname获取本地ip和端口时,端口时对的,但ip却是客户端的ip,不是服务端的ip。
我的客户端和服务端分别在两台机器上,请教,这是怎么回事?
//本地的网络地址信息
struct sockaddr_in localAddr;
int nlocalAddrLen = sizeof(struct sockaddr_in);
//对端的网络地址信息
struct sockaddr_in remoteAddr;
int nremoteAddrLen = sizeof(struct sockaddr_in);
//获取对端地址
if( 0 != getpeername(cliSocket, (sockaddr *)(&remoteAddr), (socklen_t *)&nremoteAddrLen) )
{
continue;
}
//获取本地地址
memset(&localAddr, 0, sizeof(localAddr));
if( 0 != getsockname(cliSocket, (sockaddr *)(&localAddr), (socklen_t *)&nlocalAddrLen) )
{
continue;
}
sprintf(szIpPort, "%s:%d-%s:%d", inet_ntoa(remoteAddr.sin_addr), htons(remoteAddr.sin_port), inet_ntoa(localAddr.sin_addr), ntohs(localAddr.sin_port)); |
|
|