最近才发现在这样以下经典的客户端程序里,实际上客户端用哪个端口发送数据是不固定,是由系统分配的(当然向服务器哪个端口发送是固定的),
我的程序在ontimer下多次执行类似的代码,发现系统分配的端口是在一个范围内循环的,不同机器不一样。可是有的时候段系统分配的端口似乎有问题,server端向该端口发送数据会被防火墙拦截住,好像这个端口不太安全?这是怎么回事呀?
能让客户端用固定端口发送数据马?
还请大家帮帮忙!  WSADATA wsaData;
   WORD version=MAKEWORD(2,0);
   int ret=WSAStartup(version,&wsaData);
   unsigned long uladdr;           
   uladdr=inet_addr(argv[1]);            //服务器地址
    
   sock=socket(AF_INET, SOCK_STREAM,0);  //建立套接字    
   server.sin_family=AF_INET;
   server.sin_port=htons(atoi(argv[2]));
   server.sin_addr.S_un.S_addr=uladdr;  //服务器ip地址
   
   connect(sock,(const sockaddr*)&server,sizeof(server))         
  
   memset(buf,0,sizeof(buf));
   printf("begin to recv\n");
   rval=recv(sock,buf,1024,0);
   closesocket(sock);

解决方案 »

  1.   

    没用,connect本来就有bind的功能,并且绑定的只是客户端向服务器哪个端口发送数据,不是客户端自己的端口
      

  2.   

    哪位能帮帮忙呀?   郁闷ing...
      

  3.   

    在connect前使用bind绑定本地端口
      

  4.   

    bind(sock,(struct sockaddr *)&server,sizeof(server));
    没有用的,server里装得是服务器的信息
      

  5.   

    对于客户端好像create的时候可以指定端口号如果不指定则系统自动分配