并发服务器设计

采用多进程来处理

tcp_server_fork.c

 1 #include <stdio.h>
 2 #include <sys/socket.h>
 3 #include <string.h>
 4 #include <netinet/in.h>
 5
 6 #define portnum 3333
 7
 8 int main()
 9 {
10     int sockfd ,new_fd;
11     struct sockaddr_in server_addr;
12     struct sockaddr_in client_addr;
13     char buffer[128];
14     int nbyte;
15     int sin_size;
16     int pid;
17     //创建套接字
18     if((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1)
19     {
20         printf("create socket error.\n");
21         exit(1);
22     }
23     //2.1设置要绑定的地址
24     bzero(&server_addr,sizeof(struct sockaddr_in));
25     sockaddr_in.sin_family = AF_INET;
26     sockaddr_in.sin_port = htons(portnum);//客户机转为网络字符序
27     sockaddr_in.sin_addr.s_addr = htonl(INADDR_ANY);//客户机转为网络字符序
28     //2.2绑定地址
29     bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
30     //3.监听端口
31     listen(sockfd,5);
32     while(1)
33     {
34         //4.等待连接
35         sin_size = sizeof(struct sockaddr);
36         new_fd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size);
37         printf("server get connection from %s\n",inet_ntoa(client_addr.sin_addr));
38
39         //由子进程来处理数据通讯
40         if(pid = fork() == 0)
41         {
42             //5.接收数据
43             nbyte = recv(new_fd,buffer,128,0);
44             buffer[nbyte]=‘\0‘;
45             printf("server received : %s\n",buffer);
46
47             close(new_fd);
48             close(sockfd);
49             exit(0);
50         }
51         else if(pid <0)
52         {
53             printf("fork error!\n");
54         }
55         //6.结束连接
56         colse(new_fd);
57
58     }
59     close(sockfd);
60
61     return 0;
62 }

tcp_server_fork.c

tcp_client.c

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <sys/socket.h>
 4 #include <netinet/in.h>
 5
 6 #define portnum 3333
 7
 8 int main()
 9 {
10     struct sockaddr_in server_addr;
11     int sockfd;
12     char buffer[128];
13
14     //1.创建套接字
15     if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
16     {
17         printf("create socket error.\n");
18         exit(1);
19     }
20     //2.1设置要链接的服务器的地址
21     bzero(&server_addr,sizeof(struct sockaddr_in));
22     server_addr.sin_family = AF_INET;
23     server_addr.sin_port = htons(portnum);
24     server_addr.sin_addr.s_addr = inet_addr("192.168.1.113");//服务器IP地址
25     //2.链接服务器
26     if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)) == -1)
27     {
28         printf("connect error.\n");
29         exit(1);
30     }
31     //3.发送数据到服务器
32     printf("Please input char:\n");
33     fgets(buffer,128,stdin);
34     send(sockfd,buffer,strlen(buffer),0);
35     //4.关闭连接
36     close(sockfd);
37
38     return 0;
39 }

tcp_client.c

时间: 2024-12-09 14:29:02

并发服务器设计的相关文章

网络并发服务器设计---9

网络并发服务器设计 1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <sys/socket.h> 4 #include <string.h> 5 #include <netinet/in.h> 6 7 #include <unistd.h> 8 9 #define portnum 3333 10 11 int main() 12 { 13 int sockfd; 14

网络并发服务器设计

为什么要并发服务器 要让服务器高效同时处理各个请求. a.采用多进程来处理(也可以多线程.或者线程池) tcp_server.c

linux并发服务器设计

linux 并发服务器: http://blog.csdn.net/ygl840455828ygl/article/details/52438167 http://www.2cto.com/os/201309/245280.html http://www.cnblogs.com/venow/archive/2012/11/22/2779667.html http://blog.csdn.net/turkeyzhou/article/details/8609360 1 背景简介 H330S模块集成

[国嵌攻略][093][并发服务器设计]

server.c #include <sys/socket.h> #include <netinet/in.h> #include <strings.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define SERVER_PORT 3333 void main(){ //创建标识 int serverfd; serverfd = socket(AF_IN

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

服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器.按处理方式来分有循环服务器和并发服务器. 1  循环服务器与并发服务器模型 在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求. 目前最常用的服务器模型有: ·循环服务器:服务器在同一时刻只能响应一个客户端的请求 ·并发服务器:服务器在同一时刻可以响应多个客户端的请求 1.1 UDP循环服务器的实现方法: UDP循环服务器每次从套接字上读取一个客户端的请求->处理->然后将

Linux 网络编程——并发服务器的三种实现模型

服务器设计技术有很多,按使用的协议来分有 TCP 服务器和 UDP 服务器,按处理方式来分有循环服务器和并发服务器. 循环服务器与并发服务器模型 在网络程序里面,一般来说都是许多客户对应一个服务器(多对一),为了处理客户的请求,对服务端的程序就提出了特殊的要求. 目前最常用的服务器模型有: ·循环服务器:服务器在同一时刻只能响应一个客户端的请求 ·并发服务器:服务器在同一时刻可以响应多个客户端的请求 UDP 循环服务器的实现方法 UDP 循环服务器每次从套接字上读取一个客户端的请求 -> 处理

Linux网络编程——tcp并发服务器(多进程)

一.tcp并发服务器概述 一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求).并发服务器设计技术一般有:多进程服务器.多线程服务器.I/O复用服务器等. 二.多进程并发服务器 在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器.多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求.父进程继续等待其它客户的请求.这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互系统中.对于一个 TCP 服务器,客户与服务器的连接可能并不

大并发服务器框架设计

简单谈一谈大并发服务器框架设计的基本思路 基本的服务器框架都是C/S结构的,请求和相应流程是这样的: 这样的框架存在一个很严重的问题,当客户端大并发请求到来,服务器需要进行大量的数据库操作,假设数据库最大连接数为 1000个,此时有10000个请求访问应用服务器,那么应用服务器只能处理1000个请求,剩下99000个等待1000个请求处理好后 再进行访问数据库处理.可以在应用服务器和数据库服务器中间增加中间层DAL,DAL采用缓冲队列和连接池设计. DAL设计缓冲队列,存储等待的请求,并且DAL

百万级高并发WebRTC流媒体服务器设计与开发

第1章 课程导学与准备工作本章主要介绍为何要学习WebRTC流媒体服务器开发,以及本门课能为我们带来哪些收获.之后会为大家介绍本课程内容具体安排,最后给出如何学好这门课程的一些学习建议.希望大家都能通过这门课程,学有所成,学有所归. 第2章 C++语言基础回顾[已掌握,可略过]为了便于大家更好的学习流媒体服务器的开发,本章将带大家对WebRTC服务器开发中用到的C++基础知识进行回顾梳理,如类的定义与使用,继承,多态,名存空间等相关知识. 第3章 服务器基础编程本章将带你学习最基础的服务器开发,