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]