婚恋网站,上海网络推广需要多少钱,2021智慧树互联网与营销创新,网站用户体验评价方案绝大部分关于socket编程的教程总是从socket的概念开始讲起的。要知道#xff0c;socket的初衷是个庞大的体系#xff0c;TCP/IP只是这个庞大体系下一个很小的子集#xff0c;而我们真正能用上的更是这个子集中的一小部分#xff1a;运输层#xff08;Host-to-Host Transpo…绝大部分关于socket编程的教程总是从socket的概念开始讲起的。要知道socket的初衷是个庞大的体系TCP/IP只是这个庞大体系下一个很小的子集而我们真正能用上的更是这个子集中的一小部分运输层Host-to-Host Transport Layer的TCP和UDP协议以及使用这两个协议进行应用层Application Layer的开发。即使是socket的核心部分网络层Internet Layer的IP协议在编程的时候我们也很少会感觉到它的存在——因为已经被封装好了我们唯一需要做的事情就是传入一个宏。第一节我想介绍的概念就这么多当然既然我们已经说了3个层了我想最好还是把最后一个层也说出来即所谓链路层Network Access Layer它包括了物理硬件和驱动程序。这四个层从底到高的顺序是链路层网络层运输层应用层。好说实话我们现在并不清楚所谓TCP到底是什么东东不过我们知道这东东名气很大。或许你早就知道另外一个声名狼藉建立在TCP协议基础上的应用程序它曾经几乎是统治了一个时代即使是今天我们依然无法消除他的影响力的——恩是的就是telnet。在这个教程中我使用的环境是Debian GNU/Linux 4.0 etch。传说中的stable -_-!!!恩我是很保守的人。如果你不是自己DIY出来的系统相信默认安装里面就应该有telnet/usr/bin/telnet要是没装就自己aptitude install吧。telnet可以与所有遵循TCP协议的服务器端进行通讯。通常socket编程总是Client/Server形式的因为有了telnet我们可以先不考虑client的程序我们先写一个支持TCP协议的server端然后用telnet作为client验证我们的程序就好了。server端的功能我们也考虑一种最简单的反馈形式echo。就如同你在终端输入echo Hello World回车后shell就会给你返回Hello World一样我们的第一个TCP server就用以实现这个功能。什么样的模型适合描述这样的一种server呢我相信一个很2的例子会有助于我们记忆TCP server端的基本流程。想象你自己是个小大佬坐办公室什么样的黑社会做办公室啊可能是讨债公司吧^^你很土只有一个小弟帮你接电话因为你自己的号码是不敢对外公开的。一次通讯的流程大概应该是这样的小弟那里的总机电话响了小弟接起电话对方说是你女朋友A妹小弟转达说“老大你马子电话”你说接过来小弟把电话接给你你和你女朋友聊天半小时挂电话。我们来分析一下整个过程中的元素。先分析成员数据请注意这里开始用C术语了你小弟listenSock你需要他来监听listen这是socket编程中的术语电话你自己communicationSock实际上打电话进行交流的是你自己你的电话号码servAddr否则你女朋友怎么能找到你你女朋友的电话号码clntAddr这个比喻有点牵强因为事实上你接起电话不需要知道对方的号码也可以通话虽然事实上你应该是知道的你不会取消了来电显示功能吧^^但是难道你是只接女朋友电话从来不打过去的牛人吗这个过程中的行为成员函数你小弟接电话并转接给你isAccept()你自己的通话handleEcho()这个行为确实比较土只会乌鸦学舌的echo呵呵。简单的说就是这些了。根据这个模型我们可以很容易写出实现我们需要的echo功能的TCP server的类class TcpServer { private: int listenSock; int communicationSock; sockaddr_in servAddr; sockaddr_in clntAddr; public: TcpServer(int listen_port); bool isAccept(); void handleEcho(); };这里面有些简写比如sock实际上就是socketaddr就是address。serv和clnt我想你一定能猜到是server和client吧。还有一个socket中的结构体sockaddr_in实际上就是这个意思socket address internet网络嵌套字地址具体解说请看下回分解。