Linux_socket_编程入门

Linux_socket_编程入门

ID:37847573

大小:90.00 KB

页数:24页

时间:2019-06-01

Linux_socket_编程入门_第1页
Linux_socket_编程入门_第2页
Linux_socket_编程入门_第3页
Linux_socket_编程入门_第4页
Linux_socket_编程入门_第5页
资源描述:

《Linux_socket_编程入门》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linuxsocket编程入门(一)TCPserver端:1、建模作者:龙飞       绝大部分关于socket编程的教程总是从socket的概念开始讲起的。要知道,socket的初衷是个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中的一小部分:运输层(Host-to-HostTransportLayer)的TCP和UDP协议,以及使用这两个协议进行应用层(ApplicationLayer)的开发。即使是socket的核心部分,网络层(InternetLayer)的IP

2、协议,在编程的时候我们也很少会感觉到它的存在——因为已经被封装好了,我们唯一需要做的事情就是传入一个宏。第一节我想介绍的概念就这么多,当然,既然我们已经说了3个层了,我想最好还是把最后一个层也说出来,即所谓链路层(NetworkAccessLayer),它包括了物理硬件和驱动程序。这四个层从底到高的顺序是:链路层--网络层--运输层--应用层。       好,说实话我们现在并不清楚所谓TCP到底是什么东东,不过我们知道这东东名气很大。或许你早就知道,另外一个声名狼藉建立在TCP协议基础上的应用程序,它曾经几乎是统

3、治了一个时代,即使是今天,我们依然无法消除他的影响力的——恩,是的,就是telnet。       在这个教程中,我使用的环境是DebianGNU/Linux4.0etch。传说中的stable-_-!!!,恩,我是很保守的人。如果你不是自己DIY出来的系统,相信默认安装里面就应该有telnet(/usr/bin/telnet,要是没装就自己aptitudeinstall吧)。telnet可以与所有遵循TCP协议的服务器端进行通讯。通常,socket编程总是Client/Server形式的,因为有了telnet,我

4、们可以先不考虑client的程序,我们先写一个支持TCP协议的server端,然后用telnet作为client验证我们的程序就好了。       server端的功能,我们也考虑一种最简单的反馈形式:echo。就如同你在终端输入echo'HelloWorld',回车后shell就会给你返回HelloWorld一样,我们的第一个TCPserver就用以实现这个功能。       什么样的模型适合描述这样的一种server呢?我相信,一个很2的例子会有助于我们记忆TCPserver端的基本流程。       想象你自

5、己是个小大佬,坐办公室(什么样的黑社会做办公室啊?可能是讨债公司吧^^)你很土,只有一个小弟帮你接电话(因为你自己的号码是不敢对外公开的)。一次通讯的流程大概应该是这样的:小弟那里的总机电话响了;小弟接起电话;对方说是你女朋友A妹;小弟转达说,“老大,你马子电话”;你说,接过来;小弟把电话接给你;你和你女朋友聊天半小时;挂电话。       我们来分析一下整个过程中的元素。先分析成员数据(请注意,这里开始用C++术语了):你小弟(listenSock),你需要他来监听(listen,这是socket编程中的术语)电

6、话;你自己(communicationSock),实际上打电话进行交流的是你自己;你的电话号码(servAddr),否则你女朋友怎么能找到你?你女朋友的电话号码(clntAddr),这个比喻有点牵强,因为事实上你接起电话,不需要知道对方的号码也可以通话(虽然事实上你应该是知道的,你不会取消了来电显示功能吧^^),但是,难道你是只接女朋友电话从来不打过去的牛人吗?这个过程中的行为(成员函数):你小弟接电话并转接给你(isAccept());你自己的通话(handleEcho())(这个行为确实比较土,只会乌鸦学舌的e

7、cho,呵呵)。       简单的说,就是这些了。根据这个模型,我们可以很容易写出实现我们需要的echo功能的TCPserver的类:class TcpServer{private:    int listenSock;//小弟    int communicationSock;//大哥    sockaddr_in servAddr;//自己的电话    sockaddr_in clntAddr;//对方的电话public:    TcpServer(intlisten_port);    bool isAcc

8、ept();//小弟接起    void handleEcho();//大哥};这里面有些简写,比如,sock实际上就是socket,addr就是address。serv和clnt我想你一定能猜到是server和client吧。还有一个socket中的结构体sockaddr_in,实际上就是这个意思:socketaddressinternet(网络嵌套字地址

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。