2、搭建一个后台服务器--客户端

上篇规定的协议请求部分:
request:
username/password, 约定username与password 各占32个字节(联同末位0)

可以将客户端的逻辑设计成:
1.将username,password 封装进buffer
2.连接服务端
3.发送buffer
4.接收二进制的系统当前时间
5.显示时间

代码如下:
服务端地址设置部分:

addr_server.sin_family = AF_INET;  
addr_server.sin_port = htons( port );  
addr_server.sin_addr.s_addr = inet_addr( ip );  

创建连接:

sock_client = socket( AF_INET, SOCK_STREAM, 0 ); 

连接服务端代码:

flag = connect( sock_client, ( struct sockaddr* ) &addr_server, sizeof( addr_server ) );  

设置buffer填充username/password代码:

sprintf(buffer, "%s", "username");  
sprintf(buffer + 32, "%s", "password" );  

buffer[31]=buffer[63] = 0;  

接着是发送:

flag = send( sock_client, buffer, 64, 0 );  
if( flag == 64 )  
{     
      printf( "send ok\n");   
}  

接收部分代码:

flag = recv( sock_client, buffer, 64, 0 );  
if( flag != sizeof( time_t ) )  
{  
       printf( "recv does not follow protocal\n");  
       close( sock_client );  
       continue;  
}  

将接收到的二进制数据转成时间

memcpy( curtime, buffer, sizeof( time_t ) );  
struct tm *ptm = localtime( curtime );  

显示时间:

printf( "system time:%04d-%02d-%02d-%02d:%02d:%02d\n", ptm->tm_year + 1900, ptm->tm_mon + 1,
       ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec );  

关闭连接:

printf( "ok,now we close connection\n" );  
close( sock_client );  

实际开发中,为了追求并发效率和提升搞压效果,客户端需要有一个循环,另外可以多进程同时操作。
实际测试中,我发现客户端的单进程并发量大概在1万左右,因此多开几个程序,已经可以满足需求了。

详细代码下载地址:
客户端代码

转载自http://blog.csdn.net/xiaofei_hah0000/article/details/8742707

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值