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);
    }  
      
}

 

 

相关文章推荐

织网的日子里——第一章:TCP时间获取之客户端和服务器端程序

环境: Ubuntu10.04 g++ / gcc 4.4.3 特别标注: 有些网站转载我的文章不标明出处,并且转载不到位,没有把相应的链接一块转过去,比如说下...

TCP协议的SOCKET服务器端解析软件

  • 2009年10月30日 22:59
  • 1.04MB
  • 下载

struts2上传照片到服务器端并以上传时间命名照片文件

要做的是struts2中在前端表单中上传照片到服务器(TOMCAT),这里是上传一个学生信息的照片,学生表的字段为 Student(id,name,sex,phone,grade,photo)这里的...
  • zlj1217
  • zlj1217
  • 2017年02月11日 13:51
  • 581

boost asio 服务器和客户端 TCP

  • 2013年06月14日 14:39
  • 11KB
  • 下载

TCP/IP网络编程 学习笔记_11 --多进程服务器端

并发服务器首先,我们来假设有下面这样两种类型的服务器:第一种,第一个连接请求的受理时间为1s,第50个连接请求的受理时间为50s,第100个连接请求的受理时间为100s。即同时很多客服端连接,需要依次...

ESP8266作为TCP服务器端使用心得

  • 2016年01月15日 14:10
  • 136KB
  • 下载

tcp 服务器端程序

  • 2014年05月21日 13:34
  • 5KB
  • 下载

boost::asio学习之[三 .2]异步tcp service

#pragma once #include #include #include #include namespace AsyService { using namespace boost:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asio学习2: TCP服务器端:对准时间 解析
举报原因:
原因补充:

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