请问我如何知道本地某个端口是否被绑定了,然后使用呢?

解决方案 »

  1.   

    Bind(本地IP,0)
    port为0,
    然后用Socket.LocalEndPoint取得系统自动分配的可用端口
      

  2.   

    首先,用bind尝试绑定,如果成功则返回0,说明你可以用了。
    如果不成功,可以调用GetLastError函数获得详细的错误信息,WSAEINVAL就是端口已被占用的错误码。
      

  3.   

    int n=0;
    sockAddr.sin_family=AF_INET;
    sockAddr.sin_addr.s_addr=inet_addr("ip");
    sockAddr.sin_port=htons(port);
    n=bind(socket,(SOCKADDR*)&sockaddr,sizeof(sockAddr));
    if(n==0)
    成功
    else 
    已经被使用
      

  4.   

    bind一下看是否成功,一般这么作
      

  5.   

    "bind一下看是否成功,一般这么作"
    但是也是可以强行和别的程序公用一个端口的.
      

  6.   

    我是这样写的:
    SOCKET socket(PF_INET);
    if(socket==INVALID_SOCKET){
    AfxMessageBox("invalid socket");
    return;
    }
    sockaddr_in sockAddr;
    int n=0;
    int port = 0;
    sockAddr.sin_family=AF_INET;
    sockAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
    sockAddr.sin_port=htons(port);
    n=bind(socket,(SOCKADDR*)&sockAddr,sizeof(sockAddr));
    if(n==0){
    AfxMessageBox("Not Used");
    }else{
    AfxMessageBox("Used");
    }请问有错误吗?为什么不管我port多少,结果n老是为-1
      

  7.   

    sockaddr_in sin;SOCKET socket;
    socket= socket(AF_INET, SOCK_DGRAM, 0);
    if(socket==INVALID_SOCKET){
    AfxMessageBox("invalid socket");
    return;
    }
    sockaddr_in sockAddr;
    int n=0;
    sockAddr.sin_addr.S_un.S_addr = INADDR_ANY;
             sockAddr.sin_family = AF_INET;
             sockAddr.sin_port = 0;
    n=bind(socket,(struct sockaddr*)&sockAddr,sizeof(sockAddr));
    if(n==0){
    AfxMessageBox("Not Used");
    }else{
    AfxMessageBox("Used");
    }
      

  8.   

    SOCKET socket;
    socket= socket(AF_INET, SOCK_DGRAM, 0);
    if(socket==INVALID_SOCKET){
    AfxMessageBox("invalid socket");
    return;
    }
    sockaddr_in sockAddr;
    int n=0;
    sockAddr.sin_addr.S_un.S_addr = INADDR_ANY;
             sockAddr.sin_family = AF_INET;
             sockAddr.sin_port = 0;
    n=bind(socket,(struct sockaddr*)&sockAddr,sizeof(sockAddr));
    if(n==0){
    AfxMessageBox("Not Used");
    }else{
    AfxMessageBox("Used");
    }
      

  9.   

    如果:
    SOCKET socket;
    socket= socket(AF_INET, SOCK_DGRAM, 0);报错:   项不会计算为接受 3 个参数的函数如果:
    SOCKET socket(AF_INET, SOCK_DGRAM, 0);|| SOCKET socket(AF_INET, SOCK_DGRAM);报错:   初始值设定项太多如果:
             SOCKET socket(AF_INET)
    通过编译,但是结果仍然是-1
      

  10.   

    // 前面加,再试
    WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
    printf("Windows sockets 2.2 startup");
    }
    else{
    printf("Using %s (Status: %s)\n",
    wsaData.szDescription, wsaData.szSystemStatus);
    printf("with API versions %d.%d to %d.%d\n\n",
    LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion),
    LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
    }
      

  11.   

    结果没有改变,不知道为什么,程序执行很快,一点击绑定按钮,马上就跳出对话框“Used”,n还是-1,郁闷
      

  12.   

    搞定了
    SOCKET asocket = socket(PF_INET,SOCK_STREAM,0);
           ^^^^^^^
    这里不能用socket作为变量,FT