当前位置:主页   - 电脑 - 程序设计 - C/C++
ASIO—下一代C++标准可能接纳的网络库(2)TCP网络应用
来源:网络   作者:九天雁翎   更新时间:2011-02-14
收藏此页】    【字号    】    【打印】    【关闭

  一、   综述

  本文仅仅是附着在boost::asio文档的一个简单说明和讲解,没有boost::asio文档可能你甚至都不知道我在讲什么,boost::asio的文档自然是需要从www.boost.org上去下。

  基本上,网络编程领域的”Hello World”程序就是类似Echo,daytime等服务器应用了。大牛Stevens经典的《Unix Network Programming》一书更是在这两个服务器上折腾了半本书,Comer的《Internetworking With TCP/IP vol III》也不例外。boost::asio的文档也就更不例外了,全部的网络方面的例子都是以daytime服务为蓝本来讲解的。呵呵,大家这样做是有道理的,毕竟从讲解网络编程的原理来看,echo,daytime等足够的简单:)

  二、    Tutorial

  首先,因为客户端程序相对服务器程序更为简单,所以一般都从客户端开始,boost::asio也是如此,第一节,给出了一个TCP 的Daytime的实现所谓示例,这里,我不拷贝其源码了,只是列出一个用windows 下用套接字接口实现的同样程序作为对比。

  1.      A synchronous TCP daytime client(一个同步的TCP daytime客户端程序)

  原始的套接字实现:

#include <stdio.h>
#include <string.h>
#include "Winsock2.h"
#include "errno.h"
#include "stdlib.h"
 
#define MAXLINE 1000
void str_cli(SOCKET sockfd)
{
    char recvline[MAXLINE] = {0};
    while ( (recv(sockfd, recvline, MAXLINE, 0)) != NULL)
    {
       printf("%s", recvline);
    }
    closesocket(sockfd);
}
 
 
int main(int argc, char **argv)
{
    WORD wVersionRequested = 0;
    WSADATA wsaData;
    int err;
 
    wVersionRequested = MAKEWORD( 2, 2 );
 
    // windows下此初始化为必须,实际是初始化WinsockDLL的过程
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {
       return -1;
    }
    SOCKET               sockfd;
    struct sockaddr_in   servaddr;
 
    if (argc != 2)
    {
       printf("usage: tcpcli <IPaddress>");
       exit(1);
    }
 
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
 
    ZeroMemory(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(13);
    servaddr.sin_addr.s_addr = inet_addr(argv[1]);
 
    if( SOCKET_ERROR == connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)))
    {
       printf("connet failed, Error Code: %d", WSAGetLastError());
       closesocket(sockfd);
       return -1;
    }
 
    str_cli(sockfd);     /* do it all */
 
    system("pause");
    exit(0);
}

编缉推荐阅读以下文章

  • ASIO—下一代C++标准可能接纳的网络库(3)UDP网络应用
  • ASIO—下一代C++标准可能接纳的网络库(1)简单的应用
其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明