3、搭建一个后台服务器--服务端(阻塞)

为什么要在标题后面加个“阻塞”呢,因为系统为了增大并发,减小等待(阻塞),建立了另一种事件模式,后文将介绍,这里只介绍阻塞的模型。
阻塞服务器要干的事大致可以分为以下几步:
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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值