驱魔圣手 发表于 2014-05-02 17:05

socket编程,,,为什么connect总是连不上。。。

client#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>


#define PORT "50000"
#define MAXDATASIZE 100


void *get_in_addr(struct sockaddr *sa)
{
        if(sa->sa_family==AF_INET)
                return &(((struct sockaddr_in *)sa)->sin_addr);
        return &(((struct sockaddr_in6 *)sa)->sin6_addr);
}       

int main(int argc,char *argv[])
{
        int sock_fd,numbyte;
        char buf;
        struct addrinfo hints,*servinfo,*p;
        int rv;
        char s;

        if(argc!=2)
        {
                fprintf(stderr,"usage:client hostname\n");
                exit(1);
        }
       
        memset(&hints,0,sizeof(hints));
        hints.ai_family=AF_UNSPEC;
        hints.ai_socktype=SOCK_STREAM;


        if(rv=getaddrinfo(argv,PORT,&hints,&servinfo)==-1)
        {
                fprintf(stderr,"getaddrinfo:%s\n",gai_strerror(rv));
                exit(2);
        }
        for(p=servinfo;NULL!=p;p=p->ai_next)
        {
                if(sock_fd=socket(p->ai_family,p->ai_socktype,p->ai_protocol)==-1)
                {
                        perror("client:socket:");
                        continue;
                }
                printf("%d\n",sock_fd);
                if(connect(sock_fd,p->ai_addr,p->ai_addrlen)==-1)
                {
                        close(sock_fd);
                        continue;
                }
                break;
        }
        if(NULL==p)
        {
                fprintf(stderr,"client:failed to connect\n");
                exit(3);
        }

        inet_ntop(p->ai_family,get_in_addr(p->ai_addr),s,strlen(s));

        printf("client:connecting to %s\n",s);

        freeaddrinfo(servinfo);
       
        if((send(sock_fd,"hello world!",12,0))==-1)
                perror("send\n");

       
        if((numbyte=recv(sock_fd,buf,MAXDATASIZE-1,0))==-1)
        {
                perror("recv");
                exit(4);
        }
       
        buf='\0';
        printf("clent:received %s\n",buf);

        close(sock_fd);
       
        exit(0);
}
页: [1]
查看完整版本: socket编程,,,为什么connect总是连不上。。。