tcp程序——回声客户端
来源:互联网 发布:财经日历数据哪个靠谱 编辑:程序博客网 时间:2024/04/30 19:01
服务器端
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>#define BUF_SIZE 1024void error_handling(char *message);int main(int argc, char *argv[]){ int serv_sock; int clnt_sock; struct sockaddr_in serv_addr; struct sockaddr_in clnt_addr; socklen_t clnt_addr_size; int str_len; char message[BUF_SIZE]; if(argc!=2){ printf("Usage: %s <port>\n", argv[0]); exit(1); } puts("socket()..."); serv_sock = socket(PF_INET, SOCK_STREAM, 0); if(serv_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 = htonl(INADDR_ANY); serv_addr.sin_port = htons(atoi(argv[1])); puts("bind()..."); if(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1) error_handling("bind() error"); puts("listen()..."); if(listen(serv_sock, 5)==-1) error_handling("listen() error"); //同一个时刻只能连接一个客户端 while(1){ //连接客户端 puts("wait accept()..."); clnt_addr_size = sizeof(clnt_addr); clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size); if(clnt_sock==-1) error_handling("accept() error"); else puts("accepted"); //从客户端读取信息,并返回给客户端 while((str_len=read(clnt_sock,message,BUF_SIZE))!=0){ puts("read() and write() message"); write(clnt_sock, message, str_len); } //关闭客户端 close(clnt_sock); puts("closed"); } close(serv_sock); return 0;}void error_handling(char *message){ fputs(message, stderr); fputc('\n',stderr); perror("[error]"); exit(1);}
客户端
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>#define BUF_SIZE 1024void error_handling(char *message);int main(int argc, char *argv[]){ int sock; struct sockaddr_in serv_addr; char message[BUF_SIZE]; int str_len; if(argc!=3){ printf("Usage: %s <host> <port>\n",argv[0]); exit(1); } puts("socket()..."); 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])); puts("connect()..."); if(connect(sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1) error_handling("bind() error"); else puts("connected..."); while(1){ fputs("Input message(Q to quit): ",stdout); fgets(message, BUF_SIZE, stdin); if(strcmp(message,"q\n")==0 || strcmp(message,"Q\n")==0) break; puts("write() and read() message"); write(sock,message,strlen(message)); str_len = read(sock, message, BUF_SIZE-1); if(str_len==-1) error_handling("read() error"); message[str_len] = 0; printf("Message from server: %s\n",message); } close(sock); return 0;}void error_handling(char *message){ fputs(message, stderr); fputc('\n',stderr); exit(1);}
运行
./server 54321
./client 127.0.0.1 54321
参考
- TCP/IP网络编程,尹圣雨
0 0
- tcp程序——回声客户端
- TCP/IP回声服务器客户端
- 基于TCP的迭代回声服务器端和客户端
- TCP IP网络编程1 简单的回声服务器端、客户端
- 基于TCP/IP的迭代回声服务器/客户端
- TCP/IP网络编程_echo回声服务器端与/客户端
- socket编程基于UDP的服务端客户端回声程序
- TCP网络程序实例——服务器端与客户端交互
- 基于Windows的迭代回声服务器端/客户端(基于TCP的服务器端/客户端)
- 网络编程(57)—— Windows下使用CAsyncSocket搭建回声服务端和客户端
- 网络编程(58)—— Windows下使用CSocket搭建回声服务端和客户端
- 回声客户端的实现
- 回声客户端的实现
- tcp网络客户端程序
- TCP服务器/客户端程序
- TCP客户端程序源代码
- dubbo——回声测试
- 9、回声客户端的实现
- 基于thinkphp3.2拓展phpexcel类库
- 堆的实现-用数组表示的完全二叉树
- 日本語:日常会话10-デパートについて
- opus开源库使用
- 关于Chrome出现warning(您的连接不是私密连接)的解决方法
- tcp程序——回声客户端
- 拒绝重复制造轮子, 一起来让开发一“键”化
- View类常用XML属性
- loadrunner Analysis设置 XX%用户响应时间
- Linux常用搜索命令(三)find命令
- 一道常被人轻视的web前端常见面试题(JS)
- 如何使用js把网页适配为一屏的几个技巧
- 161108
- Android图形处理-Drawabble