📄 client.c
字号:
/**************************************************************************** Copyright (C) 2006 by Soasen Co.,Ltd. ** desc: CS模式通用客户端* 座友铭:凡是程序当前不需要的,都是垃圾,80%的时间做20%的事情。(程序的效率)* ****************************************************************************/#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <stdio.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <stdlib.h>#define MAXDATASIZE 1024void process(FILE *fp,int sockfd);int main(int argc,char *argv[]){ int sd,rc,i; struct sockaddr_in localAddr,servAddr; struct hostent *h; int port; if(argc!=3) { printf("usage: %s<server><IP>\n",argv[0]); exit(1); } h=gethostbyname(argv[1]); if(h==NULL) { printf("%s:unknown host'%s'\n",argv[0],argv[1]); exit(1); } if((port=atoi(argv[2]))<0) { fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]); exit(1); } servAddr.sin_family=h->h_addrtype; memcpy((char *)&servAddr.sin_addr.s_addr,h->h_addr_list[0],h->h_length); servAddr.sin_port=htons(port); sd=socket(AF_INET,SOCK_STREAM,0); if(sd<0) { perror("cannot open socket"); exit(1); } /*绑定端口号*/ localAddr.sin_family=AF_INET; localAddr.sin_addr.s_addr=htonl(INADDR_ANY); localAddr.sin_port=htons(0); rc=bind(sd,(struct sockaddr *)&localAddr,sizeof(localAddr)); if(rc<0) { printf("%s:cannot bind port TCP %d\n",argv[0],port); perror("error"); exit(1); } /*连接到服务器*/ rc=connect(sd,(struct sockaddr *)&servAddr,sizeof(servAddr)); if(rc<0) { perror("cannot connect"); exit(1); } process(stdin,sd); close(sd);}void process(FILE *fp,int sockfd){ char sendline[MAXDATASIZE],revline[MAXDATASIZE]; int numbytes; printf("Connetc to server:\n"); while(fgets(sendline,MAXDATASIZE,fp)!=NULL){ send(sockfd,sendline,strlen(sendline),0); if((numbytes=recv(sockfd,revline,MAXDATASIZE,0))==0){ printf("server termined.\n"); return; } revline[numbytes]='\0'; printf("recv message:%s\n",revline); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -