在使用winsock或CSock时, 设置网络端口时常会遇到" address in use" 的错误, 但又不想逐个端口尝试. 如下,我用下面函数之一,在服务器端由Windows分配端口。
---------------
CAsyncSocket::Create
BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL );........nSocketPortA well-known port to be used with the socket, or 0 if you want Windows Sockets to select a port.
---------------
CAsyncSocket::Bind
BOOL Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL );BOOL Bind ( const SOCKADDR* lpSockAddr, int nSockAddrLen );将nSocketPort设置为0或者是lpSockAddr设置为NULL,也可以自动的让Windows选择一个空闲的端口!---------------
既然由Windows随机分配端口,那么如何协调服务器端与客户端端口一致性?

解决方案 »

  1.   

    "在使用winsock或CSock时, 设置网络端口时常会遇到" address in use" 的错误, "那么这问题,又该如何解决呢?
      

  2.   

    我想的办法是用gettcptable()先得到本机被使用的端口,记得装sdk啊!
    然后再看自己用那个port!
      

  3.   

    netstat -na查看所有的端口连接情况
      

  4.   

    gettcptable ,getudptable来产看对应的连接
      

  5.   

    通过gettcptable()和getudptable(),你可以知道本机的哪些端口已经被占用了,注意不仅是在“建立”状态的,还包括close_wait等等。
    下来就是选一个没用过的端口了!注:
    win2k缺省的出站连接的临时端口为1024-5000,要想使用更多的出站端口需要修改注册表
    修改方式:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
    项下建一个
    MaxUserPort
    双字节值,
    例如:取值为10000时,大约有9000个端口可用