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

服务端:

#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下多线程实现服务端相关推荐

  1. linux下svn(subversion)服务端添加工程及配置权限

    linux下svn(subversion)服务端添加工程及配置权限 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/9010507.html 此篇我只是将所做过的 ...

  2. Linux下安装SVN服务端

    第一步:检查是否安装 使用版本查看检查svn是否已经安装过,如果反馈版本则已经安装过就不需要再次安装,如没有反馈版本信息则可通过yum安装软件. [root@localhost /]# svnserv ...

  3. linux下查看Tomcat服务端口号

    第一种使用命令查看 第一步,ps -ef|grep tomcat 查看运行的Tomcat 服务,获取 PID 第二步,根据 PID ,查找端口号 netstat -antup |grep LISTEN ...

  4. linux怎么安装git服务器,linux下安装git服务端

    [root@m2 ~]# yum install -y epel-* [root@m2 ~]# yum install -y git 创建仓库目录 [root@m2 ~]# mkdir /mnt/gi ...

  5. 开发基础 - Linux下安装SVN服务端

    第一步:检查是否安装 使用版本查看检查svn是否已经安装过,如果反馈版本则已经安装过就不需要再次安装,如没有反馈版本信息则可通过yum安装软件. [root@localhost /]# svnserv ...

  6. Linux下安装SVN服务端(全)

    1.简介 Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. yum install subversion 2.配置 2.1.创建仓库 ...

  7. Linux下安装SVN服务端的方法步骤

    一.yum 安装 yum install subversion 若需查看svn安装位置,可以用以下命令: rpm -ql subversion 二.配置 1.创建仓库 我们在/home下建立一个名为s ...

  8. Linux下安装SVN服务端小白教程

    安装 使用yum安装非常简单: yum install subversion 配置 创建仓库 我们这里在/home下建立一个名为svn的仓库(repository),以后所有代码都放在这个下面,创建成 ...

  9. Linux下安装SVN服务端教程

    1.安装 使用yum安装非常简单: yum install subversion 2.1. 创建仓库 我们这里在/home下建立一个名为svn的仓库(repository),以后所有代码都放在这个下面 ...

最新文章

  1. usaco shuttle puzzle(dfs剪枝)
  2. usaco street race(dfs)
  3. hbase delete.deleteColumns问题
  4. Spark常用函数讲解之键值RDD转换
  5. 《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》——6.5节光照的每顶点计算与每片元计算...
  6. 框架使用SpringBoot + Spring Security Oauth2 +PostMan
  7. java里怎么存入数据并进行排序_Java数据结构之排序---插入排序
  8. CSS中文乱码解决方法
  9. 限时|领取黄博士整理的人工智能数学资料
  10. SQL2005迁移账户密码粗鲁设置
  11. “云”起风涌,邮件服务器助航企业云端升级
  12. css中的clip属性rect(top,right,bottom,left);
  13. 谷歌网页存储为pdf或图片
  14. 国内地图服务对比分析
  15. MFC银行卡卡号验证程序
  16. 各种 Python 库/模块/工具
  17. 写贺卡给毕业师姐怎么写计算机系的,师哥送下一届毕业的寄语
  18. Skynet服务器框架系列教程,skynet 服务端框架安装/运行
  19. C#:查找文件所在位置
  20. 嵌入式毕设分享 stm32人体健康状态检测系统(项目开源)

热门文章

  1. 【Java 网络编程】网络相关概念
  2. 【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
  3. mysql 触发器介绍
  4. Jenkins设置用户权限
  5. SVA Function Coverage
  6. ubuntu更改文件夹属性
  7. 使用Aspose.Cells的基础知识整理
  8. 2、RabbitMQ-simplest thing(简单队列)
  9. Scrapy 框架 中间件,信号,定制命令
  10. 浏览器如何渲染页面?