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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux下多线程实现服务端

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

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

服務(wù)端:

?

#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)過(guò)編譯,能運(yùn)行。

?

?

[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

多進(jìn)程版本參看:http://blog.csdn.net/stpeace/article/details/75947203

總結(jié)

以上是生活随笔為你收集整理的linux下多线程实现服务端的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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