TCP/IP网络编程 I/O流分离的半关闭问题(1)(2)
// // main.cpp // hello_client // // Created by app05 on 15-10-13. // Copyright (c) 2015年 app05. All rights reserved. // // #include #include #include #include #include #include #define BUF_SIZE 1024 void error_handling(char *message); int main(int argc, const char * argv[]) { int sock; char buf[BUF_SIZE]; struct sockaddr_in serv_adr; FILE *readfp; FILE *writefp; if(argc != 3) { printf("Usage: %s \n", argv[0]); exit(1); } sock = socket(PF_INET, SOCK_STREAM, 0); if(sock == -1) error_handling("socket() error"); memset(&serv_adr, 0, sizeof(serv_adr)); serv_adr.sin_family = AF_INET; serv_adr.sin_addr.s_addr = inet_addr(argv[1]); serv_adr.sin_port = htons(atoi(argv[2])); if (connect(sock, (struct sockaddr *) &serv_adr, sizeof(serv_adr)) == -1) error_handling("connect() error"); readfp = fdopen(sock, "r"); writefp = fdopen(sock, "w"); while (1) { if (fgets(buf, sizeof(buf), readfp) == NULL) //收到EOF,返回NULL break; fputs(buf, stdout); fflush(stdout); } //向服务端发送最后的字符串 fputs("FROM CLIENT: Thank you! \n", writefp); fflush(writefp); //半关闭shutdown主要用于服务端,客服端直接关闭一般不会有什么影响( 学习笔记_10) fclose(writefp); fclose(readfp); return 0; } void error_handling(char *message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }
评论暂时关闭