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下多线程实现服务端相关推荐
- linux下svn(subversion)服务端添加工程及配置权限
linux下svn(subversion)服务端添加工程及配置权限 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/9010507.html 此篇我只是将所做过的 ...
- Linux下安装SVN服务端
第一步:检查是否安装 使用版本查看检查svn是否已经安装过,如果反馈版本则已经安装过就不需要再次安装,如没有反馈版本信息则可通过yum安装软件. [root@localhost /]# svnserv ...
- linux下查看Tomcat服务端口号
第一种使用命令查看 第一步,ps -ef|grep tomcat 查看运行的Tomcat 服务,获取 PID 第二步,根据 PID ,查找端口号 netstat -antup |grep LISTEN ...
- linux怎么安装git服务器,linux下安装git服务端
[root@m2 ~]# yum install -y epel-* [root@m2 ~]# yum install -y git 创建仓库目录 [root@m2 ~]# mkdir /mnt/gi ...
- 开发基础 - Linux下安装SVN服务端
第一步:检查是否安装 使用版本查看检查svn是否已经安装过,如果反馈版本则已经安装过就不需要再次安装,如没有反馈版本信息则可通过yum安装软件. [root@localhost /]# svnserv ...
- Linux下安装SVN服务端(全)
1.简介 Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. yum install subversion 2.配置 2.1.创建仓库 ...
- Linux下安装SVN服务端的方法步骤
一.yum 安装 yum install subversion 若需查看svn安装位置,可以用以下命令: rpm -ql subversion 二.配置 1.创建仓库 我们在/home下建立一个名为s ...
- Linux下安装SVN服务端小白教程
安装 使用yum安装非常简单: yum install subversion 配置 创建仓库 我们这里在/home下建立一个名为svn的仓库(repository),以后所有代码都放在这个下面,创建成 ...
- Linux下安装SVN服务端教程
1.安装 使用yum安装非常简单: yum install subversion 2.1. 创建仓库 我们这里在/home下建立一个名为svn的仓库(repository),以后所有代码都放在这个下面 ...
最新文章
- usaco shuttle puzzle(dfs剪枝)
- usaco street race(dfs)
- hbase delete.deleteColumns问题
- Spark常用函数讲解之键值RDD转换
- 《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》——6.5节光照的每顶点计算与每片元计算...
- 框架使用SpringBoot + Spring Security Oauth2 +PostMan
- java里怎么存入数据并进行排序_Java数据结构之排序---插入排序
- CSS中文乱码解决方法
- 限时|领取黄博士整理的人工智能数学资料
- SQL2005迁移账户密码粗鲁设置
- “云”起风涌,邮件服务器助航企业云端升级
- css中的clip属性rect(top,right,bottom,left);
- 谷歌网页存储为pdf或图片
- 国内地图服务对比分析
- MFC银行卡卡号验证程序
- 各种 Python 库/模块/工具
- 写贺卡给毕业师姐怎么写计算机系的,师哥送下一届毕业的寄语
- Skynet服务器框架系列教程,skynet 服务端框架安装/运行
- C#:查找文件所在位置
- 嵌入式毕设分享 stm32人体健康状态检测系统(项目开源)