我有一个服务器,要用它接收很多不同的流数据,每组数据都需要使用不同的端口。当数据发送端请求发送数据时,服务器必须提供一个接收端口比如:1700,但是可能同时有几十个这种发送端传送数据过来,那服务器必须提供如:1701..1730这么多个端口接收发送端的数据。问题是我如何判断如: 1711这个端口有没有被其它程序占用。如果有占用那我必须使用如1712等其它端口,用代码如何实现判断某一个端口是否可用!

解决方案 »

  1.   

    邦定不成功就说明不可用。#define LISTENPORT 2005
    int sock_listen;
    struct sockaddr_in my_addr; /* 本机地址信息*/
    struct sockaddr_in remote_addr; /*客户端地址信息*/
    int    sin_size=0;

    if ((sock_listen = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
    perror("socket create error!");
    exit(1);
    }
    my_addr.sin_family=AF_INET;
    my_addr.sin_port=htons(LISTENPORT);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(my_addr.sin_zero),8);
    if (bind(sock_listen, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
    {
    perror("bind error\n");
    exit(1);
    }
    if(listen(sock_listen, MAX_CONNECT_NUM) == -1)
    {
    perror("listen error");
    exit(1);
    }