日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下多线程实现服务端

發(fā)布時間:2025/6/15 linux 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下多线程实现服务端 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? 并發(fā)服務端有多線程的和多進程的,今天來看一下多線程的。線程編程可能會麻煩一點,其中涉及到一些同步,死鎖問題,但是也有其優(yōu)點。并發(fā)服務端用的多的還是多進程。

服務端:

?

#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)//創(chuàng)建線程{ 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; }

?

經(jīng)過編譯,能運行。

?

?

[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下多线程实现服务端的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。