首页 > 其他 > 详细

TCP网络编程实例-echo

时间:2017-04-08 13:51:59      阅读:227      评论:0      收藏:0      [点我收藏+]

  TCP网络编程有三个例子最值得学习研究,分别是echo、chat、proxy。

  echo的作用:熟悉服务端被动接受新连接、收发数据、被动处理连接断开。每个连接是独立服务的,连接之间没有关联。在消息内容方面echo有一些变种:比如做成一问一答得方式,收到的请求和发送响应的内容不一样,这时候要考虑打包与拆包格式的设计,进一步还可以写成简单的HTTP服务。

  chat的作用:连接之间的数据有交流,从a收到的数据要发给b。这样对连接管理提出了更高的要求:如何用一个程序同时处理多个连接?fork()-per-connection似乎是不行的。如何防止串话?b有可能随时断开连接,而新建立的连接c可能恰好复用了b的文件描述符,那么a会不会错误地把消息发给c?

  proxy的作用:连接的管理更加复杂:既要被动接受连接,也要主动发起连接;既要主动关闭连接,也要被动关闭连接。还要考虑两边速度不匹配。

  这三个例子功能简单,突出了TCP网络编程中的重点问题,挨着做一遍基本就能到基础层次。chat例子如腾讯的qq,今天发现一个很好的范强软件lantern,就是proxy的应用。另外推荐两个学习socketAPI的神器:IPython、netcat。IDE用CLion,不要太好用。

 

  Linux服务端编程有多种模型:多进程、多线程、select poll epoll等多路IO复用。

  首先梳理一下TCP服务端多线程模型:

 

void *worker(void *arg)
{
    int client = *((int *)arg);
    while (read(client) > 0)
    {
        write(client);
    }
    close(client);
}

int main()
{
    socket();
    bind();
    listen();
    while (1)
    {
        int client = accept();
        if (client > 0)
        {
            pthread_t pt;
            pthread_create(&pt, NULL, worker, &client);
        }
    }
}

 

 

 

 echo既是将从客户端读到的数据原封不动的写回客户端,或者加以处理写回。

TCP网络编程实例-echo

原文:http://www.cnblogs.com/xuelei/p/6681534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!