zoukankan      html  css  js  c++  java
  • asio学习2: TCP服务器端:对准时间 解析

    #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,0sizeof(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);
        }  
          
    }
  • 相关阅读:
    Linux命令行和Shell脚本编程
    Excel自动触发时间
    dom4j读取xml文件 简单例子
    GSM & Foxit Reader
    ThreadPoolExecutor 线程池
    Linux /var/log
    delphi开发技巧
    利用ScktSrvr打造多功能Socket服务器
    delphi中Windows消息大全使用详解
    自己构造注入点方便入侵
  • 原文地址:https://www.cnblogs.com/lzjsky/p/2157386.html
Copyright © 2011-2022 走看看