void main(int argc, char** argv)
{
    int sockfd, n;
    struct sockaddr_in servaddr;
    char buff[1000];    
    if((sockfd=socket(AF_INET, SOCK_STREAM, 0))<0)printf("error socket\n");
    
//    bzero(&servaddr, sizeof(servaddr));    servaddr.sin_family=AF_INET;
//    servaddr.sin_addr.s_addr=htonl(202.206.211.151);
    servaddr.sin_port=htonl(13);
    
    if((inet_addr( argv[1]))<0)printf("error inet\n");
    
    
    if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))<0)printf("error connect\n");
    
    
    while((n=read(sockfd ,buff,1000))>0)
    {
        buff[n]=0;
        fputs(buff, stdout);
    }
//    exit(0);
}
总是connect出错不止是位身莫,谢谢??

解决方案 »

  1.   

    没有看到你用WSAStartup()函数的地方
    另外,connect()有可能和你server端没有accept()有关
      

  2.   

    这个程序是在unix环境下的,wsastartup是神莫函数??
      

  3.   

    1. WSADATA wsaData; // 先声明一个变量.2. 在调用socket()之前加上下面的:
    if(WSAStartup(0x101,&wsaData))  // 调用的是winsock1.1版本,支持所有平台{//找不到winsock库时的错误处理! 发个警告信息什么的.}3. 在exit()之前加上下面的:
    WSACleanup(); // 清洁工作要做好.
      

  4.   

    unix下的程序,你来VC板块??
    估计是你的server端的问题,看看端口是否对应,accept() 是否在阻塞状态
      

  5.   

    搞错了,你用的是UNIX,不需要WSAStartup().1. UNIX使用面向连接的套接字SOCK_STREAM使用TCP协议,服务器和客户端需要如下通信方式:Server             Clientsocket()           socket()
    bind()
    listen()
    accept()   <----   connect()
    recv()     <----   send()
    send()     ---->   recv()
    close()    <--->   close()2. UNIX使用无连接的套接字SOCK_DGRAM使用UDP协议,通信方式如下:UDP Server          UDP Clientsocket()            socket()
    bind()
    recvform()   <---   sendto()
    sendto()     --->   recvform()
    close()             close()你用的是TCP协议,对照你的服务器程序检查一下有没有漏掉哪一步.下面给个实例服务器端程序 
    /******* 服务器程序  (server.c) ************/ 
    /* #include部分省略 */int main(int argc, char *argv[]) 

     int sockfd,new_fd; 
     struct sockaddr_in server_addr; 
     struct sockaddr_in client_addr; 
     int sin_size,portnumber; 
     char hello[]="this is a sample!\n";  if(argc!=2) 
     { 
      fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]); 
      exit(1); 
     } 
      
     if((portnumber=atoi(argv[1]))<0) 
     { 
      fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]); 
      exit(1); 
     } /* 服务器端开始建立socket描述符 */ 
     if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)   
     { 
            fprintf(stderr,"Socket error:%s\n\a",strerror(errno)); 
            exit(1); 
     } /* 服务器端填充 sockaddr结构  */  
     bzero(&server_addr,sizeof(struct sockaddr_in)); 
     server_addr.sin_family=AF_INET; 
     server_addr.sin_addr.s_addr=htonl(INADDR_ANY); 
     server_addr.sin_port=htons(portnumber); 
      
    /* 捆绑sockfd描述符  */  
     if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) 
     { 
            fprintf(stderr,"Bind error:%s\n\a",strerror(errno)); 
            exit(1); 
     } 
      
    /* 监听sockfd描述符  */ 
     if(listen(sockfd,5)==-1) 
     { 
            fprintf(stderr,"Listen error:%s\n\a",strerror(errno)); 
            exit(1); 
     }  while(1) 
     { 
            /* 服务器阻塞,直到客户程序建立连接  */ 
            sin_size=sizeof(struct sockaddr_in); 
            if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1) 
            { 
                    fprintf(stderr,"Accept error:%s\n\a",strerror(errno)); 
                    exit(1); 
        }         fprintf(stderr,"Server get connection from %s\n", 
                                            inet_ntoa(client_addr.sin_addr)); 
            if(write(new_fd,hello,strlen(hello))==-1) 
            { 
             fprintf(stderr,"Write Error:%s\n",strerror(errno)); 
             exit(1); 
            } 
    /* 这个通讯已经结束     */ 
            close(new_fd); 
    /* 循环下一个     */   
      } 
     close(sockfd); 
     exit(0); 
    } 客户端程序 /******* 客户端程序  client.c ************/ /* #include部分省略 */int main(int argc, char *argv[]) 

     int sockfd; 
     char buffer[1024]; 
     struct sockaddr_in server_addr; 
     struct hostent *host; 
     int portnumber,nbytes;  if(argc!=3) 
     { 
      fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]); 
      exit(1); 
     } 
      
     if((host=gethostbyname(argv[1]))==NULL) 
     { 
            fprintf(stderr,"Gethostname error\n"); 
            exit(1); 
     }  if((portnumber=atoi(argv[2]))<0) 
     { 
            fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]); 
            exit(1); 
     } 
      
    /* 客户程序开始建立 sockfd描述符  */ 
     if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) 
     { 
            fprintf(stderr,"Socket Error:%s\a\n",strerror(errno)); 
            exit(1); 
     } /* 客户程序填充服务端的资料       */ 
     bzero(&server_addr,sizeof(server_addr)); 
     server_addr.sin_family=AF_INET; 
     server_addr.sin_port=htons(portnumber); 
     server_addr.sin_addr=*((struct in_addr *)host->h_addr); 
      
    /* 客户程序发起连接请求         */  
     if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) 

      fprintf(stderr,"Connect Error:%s\a\n",strerror(errno)); 
      exit(1); 
    } /* 连接成功了           */ 
    if((nbytes=read(sockfd,buffer,1024))==-1) 

            fprintf(stderr,"Read Error:%s\n",strerror(errno)); 
            exit(1); 
     } 
     buffer[nbytes]='\0'; 
     printf("I have received:%s\n",buffer); 
    /* 结束通讯     */ 
     close(sockfd); 
     exit(0);