📄 client.c
字号:
/* ============================================================================ Name : client.c Author : maduohe Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netdb.h>#include <unistd.h>#include <netinet/in.h>#include <string.h>#define MAXSIZE 80#define MYPORT 3490 void str_cli(FILE *, int);int main(int argc, char **argv) { int sockfd, ret, len; struct sockaddr_in ser_addr; char *myname; struct hostent *sh; struct in_addr **addrs; if (argc !=2) { printf("parameters not match."); exit(0); } //获取服务器名称 if ((sh = gethostbyname(argv[1]))== NULL) { printf("parameters not match"); exit(0); } //根据服务器名称获取详细信息 addrs = (struct in_addr **)sh->h_addr_list; //尝试与服务器的各个地址连接,知道连接上其中一个为止 for (; *addrs!=NULL; addrs++) { sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd<0) { printf("error in socket"); exit(1); } //创建套接口 ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(MYPORT); memcpy(&(ser_addr.sin_addr), *addrs, sizeof(struct in_addr)); bzero(&(ser_addr.sin_zero), 8); ret = connect(sockfd,(struct sockaddr *)&ser_addr, sizeof(struct sockaddr)); if (ret == 0) { break; } else//连接成功则跳出循环 { printf("error connecting."); close(sockfd); } } //连接不成功则报错并退出 if (*addrs == NULL) { printf("can't get connected with server"); exit(0); } //数据传输操作 str_cli(stdin, sockfd); //操作结束,关闭socket close(sockfd); exit(0); }void str_cli(FILE *fp, int sockfd) { char sends[MAXSIZE], recvs[MAXSIZE]; int n = 0; while (fgets(sends, MAXSIZE, fp)!= NULL) { send(sockfd, sends, strlen(sends), 0); if ((n = recv(sockfd, recvs, MAXSIZE, 0)) == 0) { printf("error receiving data."); exit(1); } recvs[n]= 0; fputs(recvs,stdout); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -