dest_addr.sin_port = htons(DEST_PORT);
  dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
   
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
sockfd 是系统调用 socket() 返回的套接口文件描述符。serv_addr 是保存着目的地端口和 IP 地址的数据结构
  client端还没有确定服务器的地址端口,怎么来确定serv_addr呢

解决方案 »

  1.   

    //邦定主机地址
    inetAddr.sin_addr.s_addr=htonl(INADDR_ANY);
    inetAddr.sin_family=AF_INET;
    inetAddr.sin_port=htons(SERVER_PORT);if(bind(sListen,(SOCKADDR*)&inetAddr,sizeof(inetAddr)) ==SOCKET_ERROR){}sAccept=accept(sListen,(SOCKADDR*)&inetAddr,&sockLen)既然inetAddr.sin_port=htons(SERVER_PORT);绑定的是服务器的端口, 那accept函数说明时说
    第二个参数是保存客户端的ip地址和端口?  我感觉怎么矛盾啊 怎么理解呢?
      

  2.   

    int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
    第二个参数serv_addr就是服务器的ip地址和端口号,也就是上面的目标地址变量dest_addr
    该函数在客户端使用if(bind(sListen,(SOCKADDR*)&inetAddr,sizeof(inetAddr)) ==SOCKET_ERROR){}
    sAccept=accept(sListen,(SOCKADDR*)&inetAddr,&sockLen)
    这两个函数是在服务器端使用的,accept的第二个参数是一个【out】的参数,也就是调用时不用给具体的值,在该函数结束返回时,这个变量里会填写客户端的地址和端口,这个函数与connect函数相对应
      

  3.   

    connect函数似乎总是返回真,不管连没连上.