[问题]关于socket的一个客户端小程序

软件和网站开发以及相关技术探讨
回复
Einsxu
帖子: 26
注册时间: 2008-03-18 13:23

[问题]关于socket的一个客户端小程序

#1

帖子 Einsxu » 2008-09-20 22:12

函数如下
运行时出现argv[1]: Connection timed out
发现指针hp赋值那出的问题( hp=gethostbyname(argv[1]); )?这是怎么回事呢?

# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/types.h>
# include <sys/socket.h>
# include <sys/select.h>
# include <sys/time.h>
# include <netinet/in.h>
# include <netdb.h>
# include <string.h>

# define PORT 13000
# define oops(m) {perror(m);exit(1);}

int max(int,int);

int main(int argc,char **argv)
{
struct sockaddr_in servaddr;
int sockfd;
struct hostent *hp;

void str_cli();
/*argv[1] the server's hostname*/
if(argc!=2){
printf("please input the right command\n");
exit(1);
}

sockfd=socket(PF_INET,SOCK_STREAM,0);

bzero(&servaddr,sizeof(servaddr));
hp=gethostbyname(argv[1]);
if(hp==NULL)
oops("argv[1]");

bcopy((void *)hp->h_addr,(void *)&servaddr.sin_addr,hp->h_length);
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(PORT);

connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

str_cli(stdin,sockfd);

return 0;
}

void str_cli(FILE *fp,int sockfd)
{
char sendbuf[BUFSIZ],recvbuf[BUFSIZ];
int maxfd1,stadineof;
fd_set readset;


while(1){
if(fgets(sendbuf,BUFSIZ,fp)!=NULL){
bzero(&recvbuf,sizeof(recvbuf));printf("**********\n");
write(sockfd,sendbuf,strlen(sendbuf));
}
else{
shutdown(sockfd,SHUT_WR);
continue;
}

if(read(sockfd,recvbuf,BUFSIZ)>0)
fputs(recvbuf,stdout);
else
printf("client read failure\n");

}
}
头像
aitilang
帖子: 1026
注册时间: 2007-04-28 21:38

#2

帖子 aitilang » 2008-09-21 0:56

argv[1]是什么?
thinkpad x61 2G DDR no cdrom
--------------------------------------------
ABS学习中
sed学习中
awk学习中
perl学习中
新手描述不清,老手猜测不到,胡乱指挥一通,后果难以预料
Einsxu
帖子: 26
注册时间: 2008-03-18 13:23

Re:

#3

帖子 Einsxu » 2008-09-23 13:59

aitilang 写了:argv[1]是什么?
the server's hostname
回复