欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > linux >内容正文

linux

linux下多线程实现服务端

发布时间:2025/6/15 linux 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 linux下多线程实现服务端 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

                并发服务端有多线程的和多进程的,今天来看一下多线程的。线程编程可能会麻烦一点,其中涉及到一些同步,死锁问题,但是也有其优点。并发服务端用的多的还是多进程。

服务端:

 

#include<stdlib.h> #include<pthread.h> #include<sys/socket.h> #include<sys/types.h> #include<stdio.h> #include<iostream> #include<netinet/in.h> #include<arpa/inet.h> #include<string.h> #include<unistd.h>void *server_handle(void * sock_fd);int main() { int sockSrv;int sockConn;struct sockaddr_in addrSrv;struct sockaddr_in addrClient;socklen_t client_length;sockSrv = socket(AF_INET,SOCK_STREAM,0);memset(&addrSrv,0,sizeof(addrSrv));addrSrv.sin_family = AF_INET;addrSrv.sin_addr.s_addr = htonl(INADDR_ANY);addrSrv.sin_port = htons(8888); bind(sockSrv,(const struct sockaddr *)(&addrSrv),sizeof(struct sockaddr_in));listen(sockSrv,5);while(1){ pthread_t thread_id;client_length = sizeof(addrClient);sockConn = accept(sockSrv,(struct sockaddr *)(&addrClient),&client_length);if(pthread_create(&thread_id,NULL,server_handle,(void *)(&sockConn)) == -1)//创建线程{ printf("pthread_create error!\n");break;}}close(sockSrv);return 0; }void *server_handle(void * sock_fd) {int fd = *(int *)sock_fd;int recvBytes = 0;char recvBuf[1024];char sendBuf[50] = "Server has received your request!\n";while(1){memset(recvBuf,0,1024);recvBytes = read(fd,recvBuf,1024);printf("recvDate=%s\n",recvBuf);if(recvBytes == 0){printf("client closed\n");break;}if(recvBytes == -1){printf("read error!\n");break;}if(write(fd,sendBuf,strlen(sendBuf)) == -1){break;}}close(fd);pthread_exit(NULL);//线程退出 }

客户端:

 

 

#include<sys/socket.h> #include<netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdio.h> #include <string.h>int main() {int sockClient = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in addrSrv;addrSrv.sin_addr.s_addr = inet_addr("127.0.0.1");addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(8888);connect(sockClient, ( const struct sockaddr *)&addrSrv, sizeof(struct sockaddr_in));char sendBuf[100] = "123";char recvBuf[100];send(sockClient, sendBuf, strlen(sendBuf)+1, 0);printf("%s\n", sendBuf);recv(sockClient,recvBuf,sizeof(recvBuf),0);printf("recvBuf=%s\n",recvBuf);getchar();close(sockClient);return 0; }

 

经过编译,能运行。

 

 

[mapan@localhost threadServer]$ ./server recvDate=123[mapan@localhost threadServer]$ ./client 123 recvBuf=Server has received your request!

 

 

 

 

 

 

参考地址:https://www.cnblogs.com/nerohwang/p/3602233.html

多进程版本参看:http://blog.csdn.net/stpeace/article/details/75947203

总结

以上是生活随笔为你收集整理的linux下多线程实现服务端的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。