5.1 基于TCP的服务器端和客户端2

来源:互联网 发布:网络规划设计师备考 编辑:程序博客网 时间:2024/06/02 04:19


4.1的Client代码中, 在传输的数据较大时就会出现问题。

服务器端不需要修改,client进行改进:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>#define BUF_SIZE1024void error_handling(char *message);int main(int argc,char *argv[]){int sock;struct sockaddr_in serv_addr;char message[BUF_SIZE];int str_len,recv_len,recv_cnt;if(argc != 3){printf("Usage : %s <IP> <port>\n",argv[0]);exit(1);}sock = socket(PF_INET,SOCK_STREAM,0);if(sock == -1){error_handling("socket() error");}memset(&serv_addr,0,sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = inet_addr(argv[1]);serv_addr.sin_port = htons(atoi(argv[2]));if(connect(sock,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) == -1){error_handling("connect() error\r\n");}else{printf("Connected....");}while(1){printf("Input message(Q to quit):");fgets(message,BUF_SIZE,stdin);if(!strcmp(message,"q\n") || !strcmp(message,"Q\n"))break;str_len = write(sock,message,strlen(message));recv_len = 0;while(recv_len < str_len){recv_cnt = read(sock,&message[recv_len],BUF_SIZE-1);if(recv_cnt == -1)error_handling("read() error!");recv_len += recv_cnt;}message[str_len] = 0;printf("Message from server : %s \n",message);}close(sock);return 0;}void error_handling(char *message){fputs(message,stderr);fputs("\n",stderr);exit(1);}

执行结果:

alex@alex-VirtualBox:~/Share/Test/tcpip$ ./echo_client2 127.0.0.1 9190Connected....Input message(Q to quit):hheafafMessage from server : hheafafInput message(Q to quit):affffffffffffffffffffffffffffffffffffffffffffff..Message from server : affffffffffffffffffffffffffffffffffffffffffffff..




0 0
原创粉丝点击