服务器程序如下:
#include <Winsock2.h>
#include <stdio.h>void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return; 
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,5); SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR); while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf,"Your IP is  %s ",
inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
}
}
我想调用getsockname得到主机地址,该如何调用?
另外,在服务器端想要显示客户机地址,是调用getpeername函数吗?

解决方案 »

  1.   

    getsockname()这个函数是有一个返回值的,返回值就是想得到的数据。我不知道你想得到的是客户机的ip地址还是计算机名?两个函数不一样,但都是通过返回值使用的。
      

  2.   

    MS可以用getsockbyname,嘿嘿,好象是这个.
    你还得加一句必须的:#pragma comment(lib,"ws2_32.lib")
      

  3.   

    int getsockname(
      SOCKET s,                    
      struct sockaddr FAR *name,  
      int FAR *namelen            
    );想得到服务器的IP地址,getsockname的第一个参数是sockSrv,还是sockConn?
      

  4.   

    GetAcceptExSockaddrs( &ov.buf[0], OV::initialReceiveSize,
    ov.addrlen, ov.addrlen, (sockaddr **) &plocal, &locallen,
    (sockaddr **) &premote, &remotelen );
    就可以得到远程IP