- 論壇徽章:
- 0
|
我在服務(wù)端 對(duì)已經(jīng)建立的socket句柄 分別使用getpeername和getsockname函數(shù),然后將他們的ip和端口打印出來。
getpeername獲取對(duì)端的ip和端口,都正確。
但是使用getsockname獲取本地ip和端口時(shí),端口時(shí)對(duì)的,但ip卻是客戶端的ip,不是服務(wù)端的ip。
我的客戶端和服務(wù)端分別在兩臺(tái)機(jī)器上,請(qǐng)教,這是怎么回事?
//本地的網(wǎng)絡(luò)地址信息
struct sockaddr_in localAddr;
int nlocalAddrLen = sizeof(struct sockaddr_in);
//對(duì)端的網(wǎng)絡(luò)地址信息
struct sockaddr_in remoteAddr;
int nremoteAddrLen = sizeof(struct sockaddr_in);
//獲取對(duì)端地址
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)); |
|
|