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 ...
随机推荐
- 一键部署etcd集群管理脚本
一.编写脚本 1 #!/bin/sh 2 # 安装 3 # ./run.sh etcd03 etcd01=http://192.168.2.44:2380,etcd02=http://192.168. ...
- 【10.5NOIP普及模拟】sort
[10.5NOIP普及模拟]sort 文章目录 [10.5NOIP普及模拟]sort 题目描述 输入 输出 输入输出样例 样例输入 样例输出 数据范围限制 解析 code 题目描述 小x和小y是好朋友 ...
- 01-MySQL Linux安装
一.检查当前系统是否安装过mysql rpm -qa|grep mysql 或 ps -ef|grep mysql 二.安装mysql服务端 rpm -ivh MySQL-server-5.5.48- ...
- windows上phpstudy配置memcache
原文 http://blog.csdn.net/ltx06/article/details/78588448 总的来说,分两步:同时安装memcached软件服务和安装php_memcache ...
- 记一次metasploitable2内网渗透之2049端口NFS漏洞
0x01.NFS简介 NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器.操作系统以及低层传送协议无关的存取远程文件的操作.RPC采用了XDR的支持.X ...
- Linux apt命令使用 以及 文本流和重定向
apt (Advanced Packaging Tool) 是一个在Debian和Ubuntu中的Shell前端软件包管理器. apt命令执行需要超级管理员权限(root). apt语法 apt [o ...
- Java8中的Stream流式操作 - 入门篇
作者:汤圆 个人博客:javalover.cc 前言 之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧 因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一 ...
- 【CTF】WDCTF-finals-2017 3-11 writeup
题目来源:WDCTF-finals-2017 题目链接:https://adworld.xctf.org.cn/task/answer?type=misc&number=1&grade ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16 欢迎加QQ群:1026880196 进行交流学习 制作Ope ...
- Maven精简笔记
Maven基本命令 1.mvn complile:编译命令,将src/main目录下的代码以及资源文件进行编译,在项目目录中生成target目录用来存放编译好的 class 文件等等 2.mvn cl ...