linux网络通信之concurrency模型pthread
来源:互联网 发布:交友网站多语言源码 编辑:程序博客网 时间:2024/05/16 14:29
客户端
/*************************************************************************> File Name: client.c> Author: 联合作战实验室> Email: v.manstein@qq.com > Created Time: Fri 24 Mar 2017 07:57:28 AM PDT ************************************************************************/#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#include<unistd.h>#define err_log(errlog) do {printf("%s:%s, %d\n", __FILE__, __func__, __LINE__);\perror(errlog); }while(0)#define N 128int main(int argc, const char *argv[]){int sockfd; int acceptfd;char buf[N] = {};struct sockaddr_in servervaddr;socklen_t addrlen = sizeof(struct sockaddr_in);if(argc < 3) {fprintf(stderr, "usage: %s serverip port.\n", argv[0]);return -1;}if((sockfd = socket(AF_INET, SOCK_STREAM, 0))< 0) {err_log("socket error: ");}servervaddr.sin_family = AF_INET;servervaddr.sin_addr.s_addr = inet_addr(argv[1]);servervaddr.sin_port = htons(atoi(argv[2]));if(connect(sockfd, (struct sockaddr*)&servervaddr, sizeof(servervaddr)) < 0) {err_log("connect error: ");}printf("client connect server success.\n");while(1) {printf("Input: ");fgets(buf, N, stdin);buf[strlen(buf) - 1] = '\0';if(send(sockfd, buf, N, 0) < 0) {err_log("send error: ");}if(strncmp(buf, "quit", 4) == 0) {break;}if(recv(sockfd, buf, N, 0) <= 0) {err_log("recv error: ");}printf("From server: %s\n", buf);}close(sockfd);return 0;}服务器
/*************************************************************************> File Name: server.c> Author: 联合作战实验室> Email: v.manstein@qq.com > Created Time: Fri 24 Mar 2017 07:57:28 AM PDT ************************************************************************/#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#include<unistd.h>#include<signal.h>#include<sys/wait.h>#include<pthread.h>#define err_log(errlog) do {printf("%s:%s, %d\n", __FILE__, __func__, __LINE__);\perror(errlog); }while(0)#define N 128#define LISTENQUEUE 5int sockfd; int acceptfd;char buf[N] = {};void *handle_client(void* args){int clientfd = (int)args;while(1) {if(recv(clientfd, buf, N, 0) < 0) {err_log("recv error: ");}printf("Receive form client: %s\n", buf);if(strncmp(buf, "quit", 4) == 0) {break;}strcat(buf, " form server.");if(send(clientfd, buf, N, 0) < 0) {err_log("send error: ");}}close(acceptfd);pthread_exit(NULL);}int main(int argc, const char *argv[]){pthread_t tid;struct sockaddr_in servervaddr, clientaddr;socklen_t addrlen = sizeof(struct sockaddr_in);if(argc < 3) {fprintf(stderr, "usage: %s serverip port.\n", argv[0]);return -1;}if((sockfd = socket(AF_INET, SOCK_STREAM, 0))< 0) {err_log("socket error: ");}servervaddr.sin_family = AF_INET;servervaddr.sin_addr.s_addr = inet_addr(argv[1]);servervaddr.sin_port = htons(atoi(argv[2]));if(bind(sockfd, (struct sockaddr*)&servervaddr, sizeof(servervaddr)) < 0) { err_log("bind error: ");} if(listen(sockfd, LISTENQUEUE) < 0) { err_log("listen error: "); }printf("server init ok.\n");while(1) {// 主线程负责接收客户端的链接请求if((acceptfd = accept(sockfd, (struct sockaddr*)&clientaddr, &addrlen)) < 0) {err_log("accept error: ");}printf("new client connect ---> acceptfd: %d - %s %d\n", acceptfd, inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));// 每有一个新客户端上线,创建线程负责处理新链接的通信if((pthread_create(&tid, NULL, handle_client, (void*)acceptfd)) < 0) {close(acceptfd);err_log("pthread_create error: ");} } close(sockfd); close(acceptfd);return 0;}
0 0
- linux网络通信之concurrency模型pthread
- linux网络通信之concurrency模型fork
- linux网络通信之concurrency模型select
- linux网络编程之posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序
- linux下socket通信之通信模型
- linux下socket通信之通信模型
- linux下socket通信之通信模型
- 浅谈网络通信之IO模型
- Linux常用命令之-网络通信
- linux网络通信之tcp
- linux网络通信之udp
- Linux网络编程之[基于socket通信的tcp协议的编程模型]
- Linux网络编程 -- 网络模型与通信过程
- Linux进程、线程模型,LWP,pthread
- socket编程之pthread多线程通信
- 网络通信模型:P2P模型
- 说说网络通信模型
- socket通信网络模型
- 如何利用JDK编译和运行
- JavaWeb——AJAX(3)
- 如何将matlab2014a调整成英文版。
- Ubuntu怎么实现两个外接屏幕显示不同内容
- JAVA开发和运行环境
- linux网络通信之concurrency模型pthread
- Linux下软raid的操作
- mysql主从复制与读写分离(一)
- 理解java环境变量的意义,Path JAVA_HOME ,Classpath的作用分别是什么?
- SAP库龄报表逻辑理解
- JAVA与JVM是否具有跨平台性质
- 煤球数目
- python代码后加逗号的作用
- 正则表达式