我现在需要指定一个客户端的端口(比如30000)来连接服务,这个怎么实现啊???
一般都是自己分配的,没见过自己指定的!

解决方案 »

  1.   

    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;;
       struct hostent *host;   if((serSocket=socket(AF_INET,SOCK_STREAM,0)) == -1)
       {
           mylog("创建Socket发生错误!");
           return -1;
       }   if((host=gethostbyname(SERVER_ADDR)) == NULL)
       {
           mylog("调用gethostbyname错误,地址:[%s]!",SERVER_ADDR);
           return -1;
       }intflag=1;
    setsockopt(serSocket,SOL_SOCKET,SO_REUSEADDR,(char *)&flag,sizeof(int));client_addr.sin_family = AF_INET;
       client_addr.sin_port = htons(4567);
       client_addr.sin_addr.s_addr = INADDR_ANY;
    if(bind(serSocket,(struct sockaddr *)&client_addr,sizeof(client_addr)) == -1)
       {
    mylog("绑定错误");
    return -1;
       }   server_addr.sin_family = AF_INET;
       server_addr.sin_port = htons(SERVER_PORT);
       server_addr.sin_addr = *((struct in_addr *)host->;h_addr);
       bzero(&server_addr.sin_zero,8);
       if(connect(serSocket,(struct sockaddr *)&server_addr,sizeof(server_addr))==-1)
       {
           mylog("连接服务器发生错误,地址:[%s]",SERVER_ADDR);
           return -1;
       }
      

  2.   

    我试了好象不行啊,服务收到的还是随机端口!
    下面这句我没加,有关系吗??
    setsockopt(serSocket,SOL_SOCKET,SO_REUSEADDR,(char *)&flag,sizeof(int));
      

  3.   

    SOCKADDR_IN结构体里面指定端口啊
      

  4.   

    to:whl3390
    大哥你看清楚问题
      

  5.   

    好了可以了,谢谢一楼的朋友!
    但现在执行一遍程序再CONNECT就返回-1,给过一会再执行才可以,这是咋会事啊???
      

  6.   

    要重新连吗? 要closesocket之后再连吧。。