socket的服务端编程时要用到bind()函数,说的是要把本地地址和端口与套接字关联。。
我怎么感觉关联的是客户端的ip地址范围用的是INADDR_ANY;
可是在客户端用printf()输出得到的服务器地址,显示的正是服务器的IP而不是我想的客户端的
我不知道这是怎么实现的。请教一下。。我想的是服务端的socket关联的是客户端的iP与端口
而客户端的刚好相反
还请好心的哥哥姐姐给解答一下!!

解决方案 »

  1.   

    服务端bind绑定的是服务端的IP地址,服务端开的端口是用于监听客户端的连接。客户端sockaddr_in套接字地址结构中设定的是服务端的IP地址与服务端的监听端口。服务端accept函数的SOCKADDR_IN结构中包含了来连接的客户端的相关信息,如IP。
      

  2.   

    建立连接后用getpeername就可以得到对方的IP,端口号。
      

  3.   

    还有提醒楼主的事,服务器端的socket一个专门用来监听,每收到一个请求就会专门再创建一个socket去负责通信传输
      

  4.   

    服务器端通过accept可以获取一个客户端的clientsocket吧,然后可以得到里面客户端的IP吧,
    同理服务器端可以通过connect得到serverclient在,从而获取服务器IP吧。
      

  5.   

    gethostbyname得到自己的socket信息
    getpeername就可以得到对方的IP,端口号
      

  6.   

    定义一个SOCKADDR_IN ,调用GetPeerName()就可以得到客户端IP了
      

  7.   


    这个是这样么???我怎么感觉不对并没有新建socket的函数啊。。
      

  8.   


    服务端accept后,会返回一个socket,服务端和客户端就通过返回的这个socket进行通信 
      

  9.   

    LZ 对C/S类型的 网编 还比较迷糊~~
    再仔细看看就好了 
    在IP报文里 有目标IP 很源IP
      

  10.   

    Client=accept(ServerSocket,(LPSOCKADDR)&m_sockServerAddr,&len);
    LPSTR lpIP;
    lpIP=inet_ntoa(m_sockServerAddr.sin_addr);