求教:unix网络编程-客户端connect报错
鄙人刚学unix sock编程,编写一客户端程序,编译成功,但执行报connect
出错,connect error:cannot assign requested address,百思不得其解,
望高手指正。我的邮箱是zcc263@263.net.下面是源代码。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define MYPORT 4950 /* 用户将发送到这个端口 */
#define MAXBUFLEN 100
int main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in their_addr; /* 联接者的地址信息 */
int numbytes;
char *buf;
if (argc != 3)
{
fprintf(stderr,"usage: talker hostname message\n");
return(1);
}
sockfd=Socket(AF_INET, SOCK_STREAM, 0);
their_addr.sin_family = AF_INET; /* 主机字节序 */
their_addr.sin_port = htonl(MYPORT); /* short, 网络字节序 */
if((their_addr.sin_addr.s_addr = inet_addr(argv[1])) == -1)
{
perror("inet_addr");
return(1);
}
bzero(&(their_addr.sin_zero), 8); /* 对结构赋0值 */
Connect(sockfd,&their_addr,sizeof(struct sockaddr));
Writen(sockfd,argv[2],sizeof(argv[2]));
if((numbytes=Readn(sockfd,&buf,MAXBUFLEN))<=0)
printf("未接收到响应\n");
else
{
buf[numbytes]=0;
printf("%s\n",buf);
}
close(sockfd);
return(0);
}
int Socket(int family,int type,int protocol)
{
int n;
if((n=socket(family,type,protocol))<0)
err_quit("socket error");
return(n);
}
int Connect(int sockfd,struct sockaddr *their_addr,int addrlen)
{
int n;
if((n=connect(sockfd,their_addr,addrlen))<0)
err_quit("connect error");
return(n);
}
int Readn(int sockfd,void *buf,size_t n)
{
ssize_t nleft;
ssize_t nread;
char *ptr;
ptr=buf;
nleft=n;
while(nleft>0)
{
if((nread=read(sockfd,ptr,nleft))<0)
if(errno==EINTR) nread=0;
else err_quit("read error");
else if(nread==0) break;
nleft-=nread;
ptr+=nread;
}
return(n-nleft);
}
int Writen(int sockfd,char *msg,size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr=msg;
nleft=n;
while(nleft>0)
{
if((nwritten=write(sockfd,ptr,nleft))<=0)
if(errno==EINTR) nwritten=0;
else err_quit("write error");
nleft-=nwritten;
ptr+=nwritten;
}
return(n);
}
int err_quit(char message[20])
{
perror(message);
exit(1);
}