在编程中,我使用listen(Mysocket,5)监听端口,其中Mysocket的端口号定义的是5000,但我用netstat -a查看使用情况时,发现没有5000端口被使用,不知为何?
    另外,使用connect和accept函数后,返回的socket中的端口号是系统自动为我们分配的吗?有没有什么规律?若我们想自己指定端口号,又没有什么好办法?
    一个端口可以对应多个socket吗?这个情况什么事会发生?

解决方案 »

  1.   

    NO,
    客户端如果不指定端口的话,则系统自动为你分配一个临时端口,那就是
    你看到的端口号。
    一个socket 连接对应了四个要素:
    客户端: (地址,端口)
    服务器: (地址,端口)
    netstat没有看到可能是因为操作系统的问题,NT下应该看得到。
      

  2.   

    我已经bind 5000 to Mysocket了,环境:win2000 profesion版
      

  3.   

    发现别的端口在Listening,并且此端口(正在Listening的端口)与foreign addr的端口建立了链接。
        在winsock编程中,用于Listen的socket和用于send/recv的socket都是用同一个端口号吗?
      

  4.   

    WSAStartup的返回值不要为非0,创建socket的返回值不要为INVALID_SOCKET,选择程序处理网络时间的WSAAsyncSelect的返回值不要为SOCKET_ERROR,设置本地端口值的bind返回值不要为SOCKET_ERROR. 这些条件最好判断一下,跟踪调试一下,应该可以找到问题的原因. :)
      

  5.   

    pehaps 
    Listen at 5000 Port,
    but connect at another temp Port.
    so at most time,the 5000 port is not in use.
      

  6.   

    程序运行都正常,就是用netstat -a -n 观察发现端口号和我自己设的用于listen的不一致(我已经bind到本地端口了)。
        不知为何?苦恼!
      

  7.   

    local_sin.sin_port = htons(nListenPort)
    你不会忘了转换吧
      

  8.   

    谢谢zteliubin(bill)!
    散分