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

原创 2007年09月16日 10:50:00
 
#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);
    }  
      
}

 

 

Asio学习1: TCP客户端:对准时间 解析

 我先从boost::asio库的一个范例程序,开始学习asio库.#include iostream>#include boost/array.hpp>#include boost/asio.hpp...
  • wokagoka
  • wokagoka
  • 2008年09月10日 16:44
  • 2167

asio学习1: TCP客户端:对准时间 解析

  我先从boost::asio库的一个范例程序,开始学习asio库.#include iostream>#include boost/array.hpp>#include boost/asio.hp...
  • little6256
  • little6256
  • 2007年09月15日 11:19
  • 863

Boost::asio范例分析 服务端

main函数要求程序调用者传递3个参数:服务器IP地址,端口号和文档根目录.其中IP地址可以是IPv4或IPv6格式.接着创建server对象实例,将传递进来的IP地址,端口号,文档根目录作为serv...
  • henreash
  • henreash
  • 2012年05月13日 11:23
  • 16332

boost::asio编程-域名解析

在网络通信中通常我们并不直接使用IP地址,而是使用域名。这时候我们就需要用reslover类来通过域名获取IP,它可以实现与IP版本无关的网址解析。 #include "stdafx.h" #incl...
  • anda0109
  • anda0109
  • 2014年12月17日 14:25
  • 3108

Boost Asio 异步TCP服务器框架

Boost Asio 异步TCP服务器框架 flyfish 2015-5-30 session 类 头文件 #pragma once #include #include #include ...
  • flyfish1986
  • flyfish1986
  • 2015年05月30日 07:32
  • 4844

深入Boost.asio的异步Tcp通信的server、client,可用来当程序骨架。

程序功能: 客户端用名字登录服务端 连接由客户端驱动,客户端请求,服务端应答 所有的请求和应答都以\n结尾 当客户端在5秒内没有发ping请求,服务端就关闭连接 客户端可以请求所有已经建立连接的用户列...
  • zhongjiezheng
  • zhongjiezheng
  • 2015年03月20日 00:11
  • 882

使用boost ASIO库封装TCP服务器类

使用异步TCP方式,可在此基础上增加更多功能。 头文件AsioTcp.h: #pragma once #include #include #include typedef boost...
  • haoxingfeng
  • haoxingfeng
  • 2013年06月14日 14:07
  • 2865

boost::asio::ip::tcp实现网络通信

一  服务端: Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 头文件 #include ...
  • flyingleo1981
  • flyingleo1981
  • 2013年05月08日 16:35
  • 1958

Boost.asio实现的同步、异步TCP通信的简单例子

每个asio程序都必须有io_server对象。对于服务端和客户端都需要socket对象,通过socket对象的成员函数进行连接和数据通信。服务端需要 acceptor对象来等待连接。下面的例子是用C...
  • zhongjiezheng
  • zhongjiezheng
  • 2015年03月19日 23:13
  • 3059

asio学习3: 异步tcp服务器端(datetime)

#include ctime>#include iostream>#include boost/bind.hpp>#include boost/shared_ptr.hpp>#include boos...
  • little6256
  • little6256
  • 2007年09月18日 16:13
  • 951
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asio学习2: TCP服务器端:对准时间 解析
举报原因:
原因补充:

(最多只允许输入30个字)