用VC写网络通信,当客户端连接服务器时,服务器怎么确定客户端要连接的是哪个端口号呢?有两个SOCKET,服务器开了两个socket,那怎么确定客户端是连接哪个socket呢?比如:服务器开了8000端口和8001端口,客户端连接8000的端口,那服务端如何得到这个客户端是连接哪个端口的呢?????

解决方案 »

  1.   

    根据你的描述,TCP下你应该有两个socket同时进行监听,一个socket绑定了8000端口,1个socket绑定了8001端口。若8000端口监听到连接请求那就是8000端口,8001端口同理。
      

  2.   

    当客户端connect时由其传入参数决定链接的哪个
      

  3.   

    在服务端的程序里,当检测有客户端连接时,我在那设了一个断点,可惜我不知道怎么得出这个客户端是连接哪个SOCKET的?两个socket同时启用
      

  4.   

    前面已经说了,当客户端执行connect操作时
    int connect(
      __in          SOCKET s,
      __in          const struct sockaddr* name,
      __in          int namelen
    );
    其中第二个参数是一个结构体struct sockaddr_in{
       short sin_family;
       unsigned short sin_port;
       struct in_addr sin_addr;
       char sin_zero[8];
    }; 其中sin_port即指定你连接的端口,因此他连接的是8000端口,就是与绑定的8000端口那个socket,而至于服务器如何识别的,这个不需要你关系,这是由协议栈来做的,可以参照http://blog.chinaunix.net/uid-22359610-id-1626525.html大致了解
      

  5.   

    有没有办法获限sockaddr里面的内容呢?因为我服务器要对连接上来的客户端进行区分,两个端口,分成两类,所以我一定要知道端口才行,求再指点
      

  6.   

    connect函数是由客户端去连接服务器时调用的,可我如何获取呢?
      

  7.   

    你服务器绑定的8000端口的socket监听到了,就代表客户端填的8000呗