粉丝34.9万获赞118.3万

ttp 通信,那么我们先来看一下书上这句原话, tcp 是一种大多数英特奈特网络协议,那比如说 http, ftp, 这是网文件传输,这个是比如说网页浏览 都用的这种协议啊,用于数据传输的低级别的这种网络协议,那他这个低级呢?相对于我们这两个,这两个呢?网络协议是面向业务的,但我们呢是面向传输的,就更面向我们具体的实现的这个, 那他是可靠的面向流的啊,面向连接的,面向连接和可靠的,感觉好像是一个意思,是吧?你之所以可靠, 就是因为我们是面向连接的,那面向连接呢?比如 tcp 里面,他连接的时候其实有三次握手啊,你断开的时候呢?是有什么四次挥走?那这些细节其实在我们这节课里面是不 需要掌握的啊,有兴趣呢,应该是多了解,比如像像学习数据库也是一样,那你需要有一些背景知识,那理解起来会更好一点。 但对目前我们需要用到的内容呢,我们会尽量的把它讲清楚,然后面向流,面向流,就有像我们以前声音 cltel 或者文件流这样啊,我们数据呢,好像就在这个这个流里面,河流里面,我们用的时候呢,我们有个泵把它抽出来啊,到底一次是抽一行呢?还是怎么抽?那我们可以通过函数来控制 好,先理解这句话啊,下面我们再看。我们将会写两个小程序,一个是考验册用库端,一个是 siri, 是一个服务器端,服务器端里面要写的东西,其实客户端里面基本上都要写。 然后呢,我们还会有一个服务器啊,所以我们写的时候,只要把 siri 写好了,可以按他的东西呢,基本上我 我们都是复制粘贴就可以实现。那我们再看建立这样的一个连接有几个步骤呢?其实这也是很常见的一个初级程序员的面试题啊,我们如果用 qt 的话,首先用 q, 你如果不用 qt, 用其他的流程也差不多。第一个是要监听, 监听是什么意思呢?就好比我有一个四零零电话一样啊,就四零零,什么叉叉叉啊,叉叉叉,对吧?别人打过来, 那我们这只是一个例子啊,那只要只要是例子,比喻的啊,只是一种比喻,只要是比喻的话,就有不恰当的地方,那不要钻牛角尖啊,比如说这是一个客服电话,那四零零呢,就相当于是我们的 ip 号一样, 那比比喻成我们的 ip 号,后面这串呢,好像比喻成我们的端口号一样,所以别人只要拿到了我们的 ip 地址,我们端口号就 就可以和我们的客服建立一个联系,对吧?但是别人用什么 ip 号,用什么 pote, 对于我们来说我们不知道,但是一旦建立了连接以后我就知道了,那相当于我们的电话上面有个显示器啊,对方他电话,比如说幺八幺,什么七七七七啊,六六六六啊,这是来者电话,那我就知道了啊,对方的 ip 号是幺八幺,他的单号是什么?反正这是一个比喻了, 那别人又打进来一个呢?如果我们在又有一个人,第二个人也打进来了,那我不可能只提供一个客服吧?但是啊,很不好的,不好意思啊,我们提供的这个例子,就书上这个例子,他提供的就只有一个客服 啊,所以如果你起多个客户端的话,其实没有什么太大的作用啊,我们会讲清楚啊这部分,那首先 理解这一部分,首先是监听,监听是什么?就是我提供了一个客服号,电话号码,然后呢我就有一个客服人员,我就等在电话前面听铃声响了,我就拿起来,这就是监听 啊,重要的什么呢?重要是我要向外提供一个我们的客服电话,那我们客电话两部分组成,一个是 ip, 一个端口号,那别人用什么打进来?不重要啊?但是他打进来以后,我就能够通过我跟他建立的这个连接啊,我就能够获得。那么我们说这个 按照这个例子来说啊,那电话是什么呢?那实际上就是我们要讲的这个烧给他,烧给他本身他是什么意思呢?烧给他本身他是一个插口的意思,就好比这有一个插口,这有一个 插口好,然后我比如说我们的用户把电话插进来以后,他就可以打电话了,对吧?然后 像他打电话的时候这样讲可能有点反了,他大概意思这样就我的客户的电话是连接这个插口的,然后这个呢是连接到我们客服的电话的。 好,那一旦建立连接以后,我们是建立连接,被别人打进来,这个电话只要拿起来,我们就相当于是已经建立连接,只要建立连接以后,那么我们就可以他就可以往这里面发消息,然后我也可以往这里个烧铁的里面发消息,对吧? 那刚才我们说的,我们一开始我们并不知道打进来电话号码,知道他是知道的,但他拨号的时候他知道我,哎,四零零,什么什么啊?他是知道的,我的 ip 是多少,我的端口号是多少,对吧?但是我不知道他, 但是一旦建立这个连接,我把这个话筒拿起来以后,我这边就可以显示,所以我通过什么去拿他的电话号码呢?通过我的扫给他,对吧?你可理解不是射我端的一个 tdp 扫给他,我通过他我是可以拿到对方的,而这个对方的叫什么? p, 英文单词里面 pr 同倍的意思啊。啊?有一个很有名的单词叫什么? prprax 吧,好像是就同倍压力,他就是说你的同倍做一些事情呢,你就必须要去做,不然你就会觉得好像被排挤一样,甚至有可能你就会做一些啊,你不适宜的东西,本来不是应该你做的事情 啊。这个皮尔就代表是我们建立一个连接以后,我们就是一种平等的关系啊,我们都是可以相互通讯的这种同辈。 好,那么我们这个例子是什么样的呢?我们这个例子按道理啊,按道理应该是有,我应该有很多个客服人员啊,我一个视频电话,你打 这样一个,我接一个,我建立一个连接,对吧?那相当于是别人这边有一个端口号打进来了,哎,我得有个端口号 啊,不是单口号,我一个骚给的。我们建立一个连接,然后别人呢?又建立一个,那么我就有应该有很多个,至少很多个指针或者很多对象。我有一个历史,历史的啊,相当有一个历史的,我这里面就可以维护啊,那每一个呢?他又会注册很多新功能,十二册就这样会比较好。 那是一个那个动态东西,但是我们这个例子呢,他是一个静态的啊,因为用于教学吗?那他是怎么实现的呢? 总之我就一个客服。我们这个例子啊,总之我们就一个客服啊,那所以呢?我的话筒就一个, 那不管谁来,那一开始有人打进来了,哎,都没有问题,对吧?我就建立一个连接,哎,我插到这个照片在里面,那我就可以跟客人聊天, 那过一会呢,又有个客人打进来了,这边这边还没挂,这个就打进来了,那怎么办呢?然后这边又建立了一个套接字的连接,那么他不断开,我只是我的客服, 我只有一。这个客服指的其实就是一个烧铁的指针啊,一个烧铁的指针,那 我只有一个指针,我所有的吊用都是通过这个指针,相当只有一个人,但有很多个电话啊,你电话通了我就不要了,我就噔噔噔,我就跑去接这个电话了,这个电话我也不挂,所以你在讲你的,我也听不见啊,你讲你的诉求,你看我要退货啊。什么?他听不见啊? 那他又跟他联系,那过一会这个又来了,又来一个人,又打进一个电话,那这边电话又响了,那么我这个客服人员呢?哎,我又去接这个电话,那这个电话呢? 又停字在那里啊,就是也没人听了,所以你巴拉巴巴说什么他也听不见。目前我们的例子是这样的一个状态,而且你因为我们代码写的问题啊,如果有一个人挂电话的话,那这个 客服他就觉得他就会自动的把所有电话都给挂掉啊,因为我我们写的响应就是这样的,所以这是程序呢,并不是一个很完整的 ttp sorry 看着的例子,所以看代码的时候要需要注意。 那如果你自己试的时候,哎,为什么我起一个客户端啊?没有问题,我起多个客户端的时候好像达不到预期啊,本来就是这样的,那因为他的急预留的,那所以呢,我们 设计的时候他的积累其实就是 q i o d y 四啊,然后呢,他会有一个面向 sokt 的这种的虚 虚的,对吧?啊,抽象的这样的一个类,然后呢,就抽象有两个实在的可以用的,一个 tdp, 一个 udp, udp 跟刷客的比的话,他就不建立连接,我就是点对点的,这样的传输他也是有好处的啊。你比如说我们现在我们要做的 一款这种网络游戏,我们要要求的是速率,而且偶尔丢几针没有关系啊,那这种情况下的话,我们当然是用 udp 更好,特别是在局域网里面,我们其实用的是很多的局域网,本来这个网络呢就条件就比较好一点, 而且如果我们说做一个飞机模拟器,对吧,我这边一按按一按按钮他就要改变方向等等,那当然是用这个烧铁的,更并不是说他更安全啊,你网络不好的时候 他也可以重新给你发包就一定好啊,你反过来的话的话,因为你会有些呃有对你的 cpu 开销也会比较大啊,你的画面可能还会比较卡顿,但是同样的仿真程序,如果你用 utp 的时候呢,效果会更好。 好,那么那,那再多说一句啊,但是如果你传的是一个文件,这个文件里面每一个数值都很重要,要不然你计算结果就会就会很差,对吧?如果你丢掉一个包,那你整个计算结果就都错了, 这种情况下呢,你就一定要用 ttp 啊,当你发现有丢包的时候,他会重新给你发,总之他有这样的一个机制,那后面呢,就是一些特殊的啊,基于 ttp 的一些额外的一些安全的这种比较比较安全的这种协议,这些呢都我们用的在说。好,我们看他跑 跑起来的样子,那书上是提供了两个啊,你如果就把这两个跑起来,是不会遇见什么问题的啊,比如说我们这边啊,开始监听,那这是我们的客服电话,对吧?然后呢,你通过这个客服电话你点连接,那你连进来了,好,那对于我来说 我两头吗?对吧?对于我来说,我的 p 二就是我电话的那一端,他的 ip 地址,他的端口号。好,那对于我来说呢,我一开始我是不知道的,你我的 p 二是什么?但是当我拿起电话的时候我就知道,哎,其实啊,我因为我就一台机的颜色吗?大家 ip 一样,那我端口号呢?啊,他原来 他是通过这个端的口号给我打进来的,那这里面有个帮的的过程啊,你你看带带码状态的时候,他有一个半的吧,好像是就绑定,他绑定是什么?并不是说这两个端口号绑定啊,他绑定的话呢, 在应该是啊,就是我没有具体看啊,在这个网络编程里面,他指的应该是我这个相当,我不是也是一个 io 设备吗?但我这个 io 设备就我这个 io 这个读写, 他绑定到一个 ip 和一个端口号啊,他应该指的是这个时候的状态,一个绑定状态,再顺便说一下,也许我说错了,说错也没关系啊,反正不影响我这个例子,那以后再跟着就好了。 好,然后呢,我们这里面你可以往外发出去,你的发出对他来说就接收,他给你写个害呢,对你来说就是接收,对吧?但是我们前面说过他只有一个客服人员,所以他只能同时拿起一个听筒。 那我们看来看这个例子,那我就起了两个客户端,这两个客户端呢,你可以是以同一个程序,那我这两个不同的 程序,其实是啊,其实是一样的,一个程序,一个 yes 们,你起两遍也是可以的。那你看啊,一开始我起的是他上面这个, 那他的是用这个端口号给我打进来的。好,打进来以后,然后呢?先点的这个,这是一,然后再点的他这个点的二,点了以后呢?哎,我又建立了一个连接,那相当于是什么这边有两个人打进来电话,然后我这边呢? 只有一个话筒,对吧?你,我没有挂你的电话的,一开始是他打进来的,哎,一开始呢,我是在跟这个人通话, 那现在呢?我没有给你断开,对吧?我其实我这个网络没有断开,但是我人走了啊,就相当于我这有客服啊,客服客服,我们画个人好了。一个单一啊,这个单一呢?他 没有挂电话,就这个是通的,这条线是通的,对吧?他没有挂电话,但是呢这边还有个话筒啊,他听见这个铃响了,他就去接这个话筒了,然后这边断开了。那所以会造成什么现象呢?当我这边 发一的时候,我收到了,然后这个呢先打进电话,这个人呢,他发了个二,我没有收到, 是吧?你说你的,我这边已经没有人去伺候你了,对吧?这按道理呢,应该是有几个刷给他,我就应该有几个客服在这里监听。那这些如果自己想试的话呢,你可以自己去写这种程序,但这个例子本身不是这样的, 服务器本来呢就应该是面向就像我们的司令电话一样的,他应该是有很多客服人员可以去接听同一个号码的。 那我们这个理论知识啊,就先讲到这里,那下面呢我们就去实现他的这个代码。



