asio学习2: TCP服务器端:对准时间 解析

8 篇文章 0 订阅
 
#include  < ctime >
#include 
< iostream >
#include 
< string >
#include 
< boost / asio.hpp >

using  boost::asio::ip::tcp;

std::
string  make_daytime_string()
{
    
using   namespace  std;
    time_t now 
=  time( 0 );
    
return  ctime( & now);
}

int  _tmain( int  argc, _TCHAR *  argv[])
{
    
try
    {
        boost::asio::io_service io_service;
        
// 新建一个asio::ip::tcp::acceptor对象来监听新的连接.我们监听TCP端口13,IP版本为V4

        
/*
        *以下构造函数相当于以下步骤
        * basic_socket_acceptor<tcp> acceptor(io_service);
        * acceptor.open(tcp::v4());
        * acceptor.bind(tcp::endpoint(13));
        * acceptor.listen(0);//default 
        
*/

        tcp::acceptor acceptor(io_service,tcp::endpoint(tcp::v4(), 
13 ));
        
// basic_endpoint(const Protocol& protocol, unsigned short port_num)
        
// 此构造函数一般作为服务器接受连接使用,ip地址即为INADDR_ANY

        
// 这是一个iterative server,也就是说同一时间只能处理一个连接.
        
// 建立一个socket来表示一个和客户端的连接, 然后等待客户端的连接
         for (;;)
        {
            tcp::socket socket(io_service);
            acceptor.accept(socket);
            std::
string  message  =  make_daytime_string();
            boost::asio::write(socket,boost::asio::buffer(message),
                boost::asio::transfer_all(),boost::asio::ignore_error());
        }        

    }
    
catch  (std::exception &  e)
    {
        std::cerr 
<<  e.what()  <<  std::endl;        
    }
    
return   0 ;
}

下面是winsock api 所写:

#include  < iostream >
#include 
< string >
#include 
< ctime >
#include 
< winsock2.h >
#pragma  comment(lib,"ws2_32.lib")

std::
string  make_daytime_string()
{
    
using   namespace  std;
    time_t now 
=  time( 0 );
    
return  ctime( & now);
}


int  main( int  argc,  char *  argv[])
{
    WSADATA wsaData;
    
if (WSAStartup(MAKEWORD( 2 , 2 ), & wsaData)  !=   0 )
    {
        std::cout 
<<   "  lib error   " ;
        
return   - 1 ;
    }

    SOCKET listenSocket;
    
if ((listenSocket  =  socket(AF_INET, SOCK_STREAM, 0 ))  ==  INVALID_SOCKET)
    {
        std::cout 
<<   " socket error " ;
        
return   - 1 ;
    }

    SOCKADDR_IN addr;
    memset(
& addr, 0 sizeof (addr));    
    addr.sin_family 
=  AF_INET;
    addr.sin_port 
=  htons( 13 );
    addr.sin_addr.s_addr 
=  htonl(ADDR_ANY);
    
if (bind(listenSocket,(sockaddr * ) & addr, sizeof (addr))  ==  SOCKET_ERROR)
    {
        std::cout 
<<   " bind error " ;
    }
    listen(listenSocket,
5 );
    
for (;;)
    {
        SOCKET socket 
=  accept(listenSocket, 0 , 0 );
        std::
string  timeStr  =  make_daytime_string();
        send(socket,timeStr.c_str(),timeStr.length(),
0 );
        closesocket(socket);
    }  
      
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值