linux-TCP多线程的并发服务器- 以言责人甚易,以义持己实难!!!
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <time.h>
5 #include <sys/types.h> /* See NOTES */
6 #include <sys/socket.h>
7 #include <netinet/in.h>
8 #include <netinet/ip.h>
9 #include <arpa/inet.h>
10 #include <unistd.h>
11 #include <sys/wait.h>
12 #include <pthread.h>
13
14 int Server_init(void);
15 typedef struct sockaddr SA;
16
17 void *callback(void* confd);
18 int main(int argc,const char *argv[])
19 {
20 int sockfd;
21 //初始化套接字
22 sockfd=Server_init();
23
24 return 0;
25 }
26
27 int Server_init(void)
28 {
29 //创建套接字
30 int sockfd=socket(AF_INET,SOCK_STREAM,0);
31 if(sockfd==-1)
32 {
33 perror("sockfd");
34 return -1;
35 }
36
37 //绑定套接字
38 struct sockaddr_in seraddr;
39 seraddr.sin_family=AF_INET;
40 seraddr.sin_port=htons(8080);
41 seraddr.sin_addr.s_addr=htonl(INADDR_ANY);
42 int ret=bind(sockfd,(SA*)&seraddr,sizeof(seraddr));
43 if(ret==-1)
44 {
45 perror("bind");
46 return -1;
47 }
48
49 //监听
50 ret=listen(sockfd,0);
51 if(ret==-1)
52 {
53 perror("listen");
54 return -1;
55 }
56 printf("listen--successful\n");
57 //接通
58 struct sockaddr_in cliaddr;
59 socklen_t len=sizeof(cliaddr);
60 while(1)
61 {
62 int confd=accept(sockfd,(SA*)&cliaddr,&len);
63 if(confd==-1)
64 {
65 perror("accept");
66 return -1;
67 }
68 printf("accept--successful %s %d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
69 pthread_t thread_id;
70 int ret=pthread_create(&thread_id,NULL,callback,(void*)confd); //把连接套接字直接发过去
71 if(ret==-1)
72 {
73 perror("pthread_create");
74 return -1;
75 }
76 pthread_detach(thread_id);
77 }
78 close(sockfd);
79 }
80
81 void *callback(void* confd)
82 {
83 int id=(int)confd; //注意:关闭套接字时,需要一个局部变量
84 while(1)
85 {
86 char buf[64];
87 bzero(buf,sizeof(buf));
88 strcpy(buf,"hello ,this is server");
89 //发送数据
90 send(id,buf,sizeof(buf),0);
91 }
92 close(id);
93 pthread_exit(NULL);
94 }
linux-TCP多线程的并发服务器- 以言责人甚易,以义持己实难!!!的更多相关文章
- Linux下几种并发服务器的实现模式
Linux下的几种并发服务器的设计模式 1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发. ...
- linux学习之高并发服务器篇(二)
高并发服务器 1.线程池并发服务器 两种模型: 预先创建阻塞于accept多线程,使用互斥锁上锁保护accept(减少了每次创建线程的开销) 预先创建多线程,由主线程调用accept 线程池 3.多路 ...
- Linux:简单的并发服务器实现
我前两天实现了一个简单的服务器和一个对应的客户端,也简单的解决了一些错误检查和常用的函数的封装,但是那个服务器的一次只能连接一个客户端,鸡肋,太鸡肋了,今天我来实现可以连接多个客户端的服务器实例:多进 ...
- LINUX环境并发服务器的三种实现模型
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器.按处理方式来分有循环服务器和并发服务器. 1 循环服务器与并发服务器模型 在网络程序里面,一般来说都是许多客户对应一个服务器,为了 ...
- python实现并发服务器实现方式(多线程/多进程/select/epoll)
python实现并发服务器实现方式(多线程/多进程/select/epoll) 并发服务器开发 并发服务器开发,使得一个服务器可以近乎同一时刻为多个客户端提供服务.实现并发的方式有多种,下面以多进 ...
- [转载] 高流量大并发Linux TCP 性能调优
原文: http://cenwj.com/2015/2/25/19 本文参考文章为: 优化Linux下的内核TCP参数来提高服务器负载能力 Linux Tuning 本文所面对的情况为: 高并发数 高 ...
- Linux客户/服务器程序设计范式1——并发服务器(多进程)
引言 本文会写一个并发服务器(concurrent server)程序,它为每个客户请求fork出一个子进程. 注意 1. 信号处理问题 对于相同信号,按信号的先后顺序依次处理.可能会产生的问题是,正 ...
- Linux配置支持高并发TCP连接(socket最大连接数)
Linux配置支持高并发TCP连接(socket最大连接数) Linux配置支持高并发TCP连接(socket最大连接数)及优化内核参数 2011-08-09 15:20:58| 分类:LNMP&a ...
- 修改Linux内核参数提高Nginx服务器并发性能
当linux下Nginx达到并发数很高,TCP TIME_WAIT套接字数量经常达到两.三万,这样服务器很容易被拖死.事实上,我们可以简单的通过修改Linux内核参数,可以减少Nginx服务器 的TI ...
随机推荐
- RabbitMQ 入门 (Go) - 1. 简介和安装
Message Broker(消息代理) 维基百科对 Message Broker 的定义是:Message broker 是一种中介程序模块,它把消息从发送方的正式消息传递协议转化为接收方的正式消息 ...
- C# - 实现类型的比较
IComparable<T> .NET 里,IComparable<T>是用来作比较的最常用接口. 如果某个类型的实例需要与该类型的其它实例进行比较或者排序的话,那么该类型就可 ...
- docker使用常见问题解决方案:错误号码2058,docker WARNING :IPv4,容器间的通讯
1.错误号码2058 1,错误解决: 解决方法:docker下mysql容器 登录 mysql -u root -p 登录你的 mysql 数据库,然后 执行这条SQL: ALTER USER 'ro ...
- docker部署nodejs项目应用
之前笔者弄了一套nestjs项目放在自己服务器上,并用pm2管理进程. 现在要把pm2停止,尝试一下用docker容器,那么首先要安装docker 一.安装docker 由于笔者服务器的系统是cent ...
- html+css写出响应式侧边导航栏
html部分:先写用div画好六个导航的卡片,再利用css添加响应效果 <div class='card-holder'> <div class='card-wrapper'> ...
- 如何从 dump 文件中提取出 C# 源代码?
一:背景 相信有很多朋友在遇到应用程序各种奇葩问题后,拿下来一个dump文件,辛辛苦苦分析了大半天,终于在某一个线程的调用栈上找到了一个可疑的方法,但 windbg 常常是以 汇编 的方式显示方法代码 ...
- C#与Python交互方式
前言: 在平时工作中,需求有多种实现方式:根据不同的需求可以采用不同的编程语言来实现.发挥各种语言的强项 如:Python的强项是:数据分析.人工智能等 .NET 开发桌面程序界面比Python更简单 ...
- 聊聊 OAuth 2.0 的 token expire_in 使用
问题背景 有同学私信问了这样的问题,访问 pig4cloud 的演示环境 查看登录请求 network 返回报文如下: { "access_token":"16d3579 ...
- 集群部署时的分布式session如何实现?
session是啥?浏览器有个cookie,在一段时间内这个cookie都存在,然后每次发请求过来都带上一个特殊的jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的sess ...
- SpringBoot的旅游项目——day01(学习记录附赠源码)
前言 学完SpringBoot的项目,Github地址,欢迎start,一起学习! 第一天 一.技术选型 基于SpringBoot+VUE的前后端分离的仿照马蜂窝的项目. 后端选用的技术为: Spri ...