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多线程的并发服务器- 以言责人甚易,以义持己实难!!!的更多相关文章

  1. Linux下几种并发服务器的实现模式

    Linux下的几种并发服务器的设计模式 1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发. ...

  2. linux学习之高并发服务器篇(二)

    高并发服务器 1.线程池并发服务器 两种模型: 预先创建阻塞于accept多线程,使用互斥锁上锁保护accept(减少了每次创建线程的开销) 预先创建多线程,由主线程调用accept 线程池 3.多路 ...

  3. Linux:简单的并发服务器实现

    我前两天实现了一个简单的服务器和一个对应的客户端,也简单的解决了一些错误检查和常用的函数的封装,但是那个服务器的一次只能连接一个客户端,鸡肋,太鸡肋了,今天我来实现可以连接多个客户端的服务器实例:多进 ...

  4. LINUX环境并发服务器的三种实现模型

    服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器.按处理方式来分有循环服务器和并发服务器. 1  循环服务器与并发服务器模型 在网络程序里面,一般来说都是许多客户对应一个服务器,为了 ...

  5. python实现并发服务器实现方式(多线程/多进程/select/epoll)

    python实现并发服务器实现方式(多线程/多进程/select/epoll)   并发服务器开发 并发服务器开发,使得一个服务器可以近乎同一时刻为多个客户端提供服务.实现并发的方式有多种,下面以多进 ...

  6. [转载] 高流量大并发Linux TCP 性能调优

    原文: http://cenwj.com/2015/2/25/19 本文参考文章为: 优化Linux下的内核TCP参数来提高服务器负载能力 Linux Tuning 本文所面对的情况为: 高并发数 高 ...

  7. Linux客户/服务器程序设计范式1——并发服务器(多进程)

    引言 本文会写一个并发服务器(concurrent server)程序,它为每个客户请求fork出一个子进程. 注意 1. 信号处理问题 对于相同信号,按信号的先后顺序依次处理.可能会产生的问题是,正 ...

  8. Linux配置支持高并发TCP连接(socket最大连接数)

    Linux配置支持高并发TCP连接(socket最大连接数) Linux配置支持高并发TCP连接(socket最大连接数)及优化内核参数 2011-08-09 15:20:58|  分类:LNMP&a ...

  9. 修改Linux内核参数提高Nginx服务器并发性能

    当linux下Nginx达到并发数很高,TCP TIME_WAIT套接字数量经常达到两.三万,这样服务器很容易被拖死.事实上,我们可以简单的通过修改Linux内核参数,可以减少Nginx服务器 的TI ...

随机推荐

  1. Azure Front Door(三)启用 Web Application Firewall (WAF) 保护Web 应用程序,拒绝恶意攻击

    一,引言 上一篇我们利用 Azure Front Door 为后端 VM 部署提供流量的负载均衡.因为是演示实例,也没有实际的后端实例代码,只有一个 "Index.html" 的静 ...

  2. 【java框架】SpringBoot(5)--SpringBoot整合分布式Dubbo+Zookeeper

    1.理论概述 1.1.分布式 分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像单个系统. 由多个系统集成成一个整体,提供多个功能,组合成一个板块,用户在使用上看起来是一个服务.(比如淘宝网 ...

  3. 【python小示例】简易彩票中奖模拟

    咱自己写个彩票程序,成功亏掉3个亿 今天突发奇想,自己设计一个小程序,模拟彩票中奖,看看如果自己有个彩票公司,能挣钱吗?代码如下: # -*- utf-8 -*- """ ...

  4. 删除文件--rm

    rm file         删除文件 rm -r dir      删除指定文件夹及文件夹下的所有内容 rm -rf dir     强制删除指定文件夹及文件夹下的所有内容

  5. 如何在 NET 程序万种死法中有效的生成 Dump (上)

    一:背景 相信很多人都知道通过 任务管理器 抓取dump,虽然简单粗暴,但无法满足程序的无数种死法,比如: 内存膨胀,程序爆炸 CPU爆高,程序累死 应用无响应,用户气死 意外退出,和人生一样 既然手 ...

  6. Leedcode算法专题训练(字符串)

    4. 两个字符串包含的字符是否完全相同 242. Valid Anagram (Easy) Leetcode / 力扣 可以用 HashMap 来映射字符与出现次数,然后比较两个字符串出现的字符数量是 ...

  7. 【笔记】《Redis设计与实现》chapter21 排序

    chapter21 排序 21.1 SORT<key> 命令的实现 // 用于保存被排序值及其权重的结构 typedef struct _redisSortObject { // 被排序键 ...

  8. 强大的工具(一):Capslock+ 3.x版本

    1 概述 作者终于把Capslock+更新到了3.x版本了,所以就更了这篇博客. 2.x版本的可以戳这里. 3.x版本与2.x版本的主要不同是更新了新的键盘布局,更加顺手,下面让我们一起来看一下吧. ...

  9. Queue API的几种实现详解

    目录 Queue API的几种方法的使用 ArrayBlockingQueue原理及源码解析 ArrayBlockingQueue的成员变量 ArrayBlockingQueue的offer和put方 ...

  10. JDBC_03_反射机制注册驱动

    反射机制注册驱动 代码:以类加载的方式注册驱动,因为注册驱动的代码是一个静态代码块,所以用Class.forname()加载该类,静态代码块也会进行加载 import java.sql.*; publ ...