3、搭建一个后台服务器--服务端(阻塞)
来源:互联网 发布:网络校准时间 编辑:程序博客网 时间:2024/05/16 08:52
为什么要在标题后面加个“阻塞”呢,因为系统为了增大并发,减小等待(阻塞),建立了另一种事件模式,后文将介绍,这里只介绍阻塞的模型。
阻塞服务器要干的事大致可以分为以下几步:
1.创建服务端监听连接
2.产生用户连接
3.接收用户请求
4.发送返回给用户
敲码过程如下:
设置监听地址与端口:
addr_server.sin_family = AF_INET; addr_server.sin_port = htons( port ); addr_server.sin_addr.s_addr = htonl( INADDR_ANY );
创建连接并绑定:
sock_server = socket( AF_INET, SOCK_STREAM, 0 ); flag = bind( sock_server, ( struct sockaddr* )&addr_server, sizeof( struct sockaddr ) ); if( flag < 0 ) { printf( "your bind is not ok\n" ); close( sock_server ); return 0; }
开始监听:
flag = listen( sock_server, 50 ); if( flag < 0 ) { printf( "your listen is not ok\n"); close( sock_server ); return 0; }
接收并产生用户连接:
sock_client = accept( sock_server, ( struct sockaddr* )&addr_client, &size ); if( sock_client <=0 ) { printf( "your accept is no ok\n"); close( sock_server ); return 0; }
接收用户数据:
flag = recv( sock_client, buffer, RECV_BUF_LEN, 0 ); if( flag <= 0 ) { printf( "your recv is no ok\n"); close( sock_client ); continue; }
校验数据合法性:
if( flag != 64 ) { printf( "your recv does follow the protocal\n"); close( sock_client ); continue; } if( buffer[31] || buffer[63] ) { printf( "your recv does follow the protocal\n"); close( sock_client ); continue; }
发送当前时间至客户端:
current = time(0); send( sock_client, ( const char* )¤t, sizeof( time_t), 0 );
关闭客户连接:
printf( "your connection is ok\n"); printf( "now close your connection\n"); close( sock_client );
这就是一个简单的服务端处理过程,阻塞模式下受IO的影响,并发量只有2K左右,前篇的客户端程序的并发量是10000,因此服务端是跟不上的,而且服务端的并发量不受客户端的进程个数影响,的确很小。
完整代码在这里:
服务器(阻塞)
转载自http://blog.csdn.net/xiaofei_hah0000/article/details/8742997
0 0
- 搭建一个后台服务器--服务端(阻塞)
- 3、搭建一个后台服务器--服务端(阻塞)
- 搭建一个后台服务器--服务端(异步,大并发)
- 搭建一个后台服务器--服务端代码(异步,大并发)
- 搭建一个后台服务器--服务端(异步,大并发)
- 搭建一个后台服务器--服务端代码(异步,大并发)
- 搭建一个后台服务器--服务端(异步,大并发)
- 4、搭建一个后台服务器--服务端代码(异步,大并发)
- 搭建一个后台服务器
- 搭建一个后台服务器--引子
- 搭建一个后台服务器--客户端
- 1、搭建一个后台服务器--引子
- 2、搭建一个后台服务器--客户端
- SVN版本服务器搭建(服务端+客户端)
- AndroidStudy---搭建后台服务器
- 如何搭建一个 HTTPS 服务端
- C++ Socket 一个服务器 多个客户端 (阻塞式)
- netty游戏服务器搭建之服务端
- 聊聊Web App、Hybrid App与Native App的设计差异
- 异步请求响应回写
- SpringMVC注解@RequestParam全面解析【转】
- URL Schemes 使用详解
- Ubuntu 下ftp服务器的安装配置 讲解
- 3、搭建一个后台服务器--服务端(阻塞)
- angular textarea字符长度的限制
- Angular2环境搭建和相关信息查询
- Coderforces 730H 730G
- 框架MVP,greendao做数据库开发,ButterKnife.bind,Volley请求,ListView第一行都有输入框……
- ViewPager嵌套Fragment再嵌套ViewPager嵌套Fragment
- Java设计模式学习04——原型模式
- 远程连接redis问题集合
- ashx页面中 Session值出现“未将对象引用设置到对象的实例”错误