00:00
哎,这呢是咱们写的ttp,诶这个网络编程的第二个例子,诶第三个例子的话呢,比它第二个呢要更复杂一些,诶我们看下这个第三个例子CTRLCL。哎,再去新建一个Java文件,看例题三啊,还是关于我们这个TCP的一个网络编程。哎,看这个啊,嗯,这里边提到说从客户端呢,发送文件给服务端,服务端呢保存到本地,这个咱们刚才已经做过这个事儿了,在这个基础之上呢,说要求我们的服务端呢,返回叫发送成功给客户端,那你再给人家客户端的一个反馈,相当于有一个交互了,那这时候呢,我们其实可以在刚才写的二的基础之上呢,进行一个迭代,哎,所以呢,我先把这个二的这个操作啊,哎,从这个客户端一直到我们这个服端啊,CTRLC咱们粘到咱们这个三的这个例题当中,哎,粘过来以后,我们从上往下呢过一下。
01:05
嗯,这里边呢,提到了我们客户端发送一个图片呢,给服务器端,哎发完了,发完以后呢,咱们这块呢就给关闭了,那现在呢说呢,你这个发完以后,这个客户端这块呢,你稍等会儿啊,先别着急关呢,哎,我这块呢,这不是先去接嘛,到这个位置一直就接完了,那接完以后的话呢,我呢有一个反馈,相当于在这个位置呢,我们插入了一个操作啊,相当于是叫服务器端,呃,给于客户端反馈。啊,给客户端反馈,那么对于咱们这块来讲呢,你也别着急去关了啊,这改成个六,你这来个五,人家给你反馈了,哎,我们要求这个客户端呢,把这个反馈的信息显示到控制台上,哎,所以呢,你在这个位置呢,应该叫接收,哎来自于我们叫服务器端的哎,这个数据哎并显示到控制台上,哎应该做这样一个事情,那咱们得按照这个顺序来啊,应该是你这边呢先发,哎然后呢,上面这块呢采取接收,那下边呢,我们先考虑服务器端呢去发。
02:10
哎,服务清单呢,现在往外写数据了,那咱们呢,那会儿也提到了socket呢啊,Get input叫输入,那你这块呢,又往外写的,是不是相当于是咱们刚才想象那个小岛这个船又回去了,哎,那你这块呢,再get一个,哎,Output stream就写出去了,然后al enter得到一个OS。哎,得到一个这个输出的一个流,那现在呢,我们就简单的啊做一个操作了,哎,我要写输出据啊,我们就用一下这个方法吧,哎说呢,嗯,你好,嗯这个美女是吧,呃,这个照片呢,我已收到。啊,哎,非常好是吧,我非常漂亮啊,非常。哎,行,那这样的话呢,我们就要get一个盖,把这个数据呢,我就给发出去了,它发出去的话呢,其实就是呃,对应着你发过来的这个socket啊呃发出去以后呢,我这块呢就可以去接收了,那接收的话呢,我这儿呢socket有呃咱们刚才给服务器端呢,发的时候呢,你叫output stream,现在呢,你就get一个input stream呗,哎,就是获取一下输入的这个啊哎得到一个S,那输入的这个话呢,我们要想能够保证数据呢不出现乱码,哎大家呢,是不是还得考虑使用一下这个叫。
03:34
Stream这个熟悉不这个。Battery output stream bos,咱们再用一次,哎,扭一个。黑哎,Batter RA output streamam,就这个位置呢,不用写内容啊,他呢就把数据存到它内部的这个数组里了啊,那人家这个数组呢,它可能很长啊,而且呢,它也可以进行一个扩展,所以这呢,你先整一个这个小的数组啊,一点点呢去接收。
04:10
哎,瑞德到我们这个buff当中。然后boos点做一个。哎,八伏0L行,就整个的话呢,把这个数据就都写到我们这个这个这个哎,Bos里边这个数组当中了啊,上面因为有个LS了啊呃,要LS1这样。好,这呢我们就写好了,写好以后整个数据呢,存到它内部的这个数组当中,我们呢把这个数据呢,显示一下,就bos点二来一个to string,诶这就搞定好,这呢我们就写完了。写完了,写完以后呢,把下边这个改一下,上面呢还是用beauty,咱们这呢改成个二啊,那相当于是新的去存一个图片,那下边呢,咱们开始执行,那执行还是先把我们这个服务器端呢做一个启动。
05:01
这就起起来了,这时候大家呢,你别连我啊,这个如果大家呢,你要开一个客户端去连我的话也是能连上的,你别连了,你连的话,我这就没法骑我这个了,是吧?哎,这个时候呢,我这个客户端呢去执行。诶有点问题,你发现我们这个客户端这块呢,是不是一直在这转,服务器端呢也在这转。接受不了了。那你看一下什么呢,我们这里边儿图片呢,也没有生成。就是我们这个标题二嘛。有同学说说这个流没关是吧?好,那我们把这个流关一下,确实也忘了啊。哎,这呢我都断开了,断开以后这呢涉及到一个新的啊bos。嗯,这块呢,把它也关一下。就这一个吧。然后下边下边呢,我们又有一个OS。行,这就关了,那关了以后就没问题了吗?再来一下。
06:04
这个转着呢,然后上边。嗯,也转着呢,这个时候的话呢,你看看他看到啊,这个两个人都不终止,都不终止的话呢,这个图片出来了。图片出来了是吧,图片出来了那挺好说明呢,我们这个呃,在这块的话呢,把它呢,就相当于是执行了啊,那执行了先看能不能打开还可以是吧,还能打开没问题啊,那么呃,怎么后边走不了呢。就是我们这呢是一个客户端,按说这块呢,应该接收信息的就不来了。他过不来,这个也也也也结束不了,相当于我们这个服务器端呢,也没终止啊,那这时候呢,我们可以做一个测试,测试一下,看看这是什么问题啊关闭。关闭了,相当于咱们看着这代码上面呢,发出来这个,诶到这儿这呢是发送,发送的话呢,我们这块呢来接收这个呢,也接收了,这个要也接收了,因为咱们看到它执行完了啊,嗯,按说呢该执行这块了,嗯执行这块的话呢,如果要是执行到这儿啊,这服务阶段呢该终止了,结果你看服务器呢还在这转,相当于你就担心这个代码有可能没执行啊,怎么执行,怎么证明这个事儿,其实你这在这块呢,写个输出语就可以了。
07:31
啊,这个我们写一个叫,比如叫呃,图片啊传输完成。哎,我写这样一句话,咱们等一下看一下在我们的服务器端呢,能不能输出这样的一句话啊啊,这是它下边来演示把这个呢,我们再删一下。啊,说cannot删除啊,这个位置看有没有把这个都关掉。这儿没关着呢是吧,关一下啊。
08:00
好。删了删了以后呢,我们现在重新来跑,把这个服务器端呢,先给它run起来。起来啦,然后呢,看一下这个客户端。站起来。OK,那首先看一下这块。这块也没有了是吧,哎,相当于这块又没有正常的给我们把这个标题一呢BT2呢,给它这个输出出来啊,那会儿是咱们那个关的时候呢,给我们生成了,哎这块呢,没有正常的显示,没有正常显示呢,看一下我们这个服务器端,服务器端呢,咱们在这写了一句话。说呢叫图片传输完成,这样也没输出,那相当于呢,下边这个呢也没走,下面的也没走,那自然而然的,你上边这块呢,这不是也也不可能接收是吧?哎,也不可能接收,所以上面也关不了,那下边呢也没走,说明呢就卡到这个之前了。啊,那怎么会卡到这块之前呢,走不下去了,又刷新。没有刷新。有同学说。
09:02
哎,这呢,其实不是一个没有刷新的问题了啊,这个刷新的话呢,其实只是影响你最后一次那个操作了,而且这时候咱们用的还是一个呃,最基本的一个节电流,哎,这个原因呢在哪?哎,我们先关一下啊。行,我这都关了,嗯,都关了以后,我们接着说一下这个主要原因呢,是因为我们上边这块在发的时候,这呢是咱们发这个图片,诶不是是这啊这呢是咱们这个发图片啊,一直在这发,然后呢,下边呢,我们是在这去接收。在这个位置去接收,我们这个位置接收这个操作叫read方法,这个read的话呢,我们F2一下这呢,关于它的一个解释说明,呃,这里边会提到一个事儿,就是我们这个方法呢,它其实是一个阻塞式的方法。嗯,这个我们在这这还没有显示的啊。嗯,什么叫阻测式的方法,这个没看着啊,哎,阻射方法就是说你没有明确告诉我的话呢,这个方法我就不会退出这个循环,像咱们写一个文件,这个文件的话呢,呃,你到末尾的时候呢,它传输的叫负一了,那你上边这块呢,是给我这块去传这个数据,那传到什么时候呢,算是传完了呢,没有给我一个明确的指示,所以呢,我们在服务器端的这个位置,它就一直呢去。
10:25
等着我们这个客户端呢,还接着发数据,没有给一个明确的标识呢,说我已经穿完了,所以对于我们服务器端来讲,它就始终呢,还停留在这个外循环当中,它就下不去了,哎,所以呢,就始终呢不能保证这个反馈过去啊,那我们呢,需要给一个明确的指示,只需要呢做这样的一个事情,在咱们的客户端把这个图片呢,我都传完以后,在这个位置呢,我们通过这个叫socket,第二哎,我们有个方法呢,叫shutdown。哎,我关闭一下数据的输出。
11:00
哎,这样的话呢,我们表示呢,我图片呢已经传完了,哎,不再去输出数据了。哎,那么这块一旦关闭以后,我们对于服务器端来讲,它就明确的得到一个指示啊,数据呢,客户端不再发了,我呢就终止了,然后接下来就能走下去了。哎,是这样子的啊,你看这个是咱们关了以后呢,哎,它就相当于是也算是一个强制终止了啊,把这个BEAUTY2呢就给输出来,把这个删一下,我们重新呢再跑server。诶跑起来,然后呢,把我们这个客户端呢,也跑起来。诶大家看这时候呢,才正确的结束了,首先这个图片呢,生成了没问题,然后接下来诶,我们在这个服务器端这块呢,说图片传输完成是咱们测试写的一句话,同时的话呢,服务端还发了一句话给我们客户端,哎客户端呢这块也收到了。哎,这呢才是一个正常的结束,呃,这呢,其实提到一个阻塞式的一个操作啊,就是我们这个read的方法,这呢也是咱们上午讲到说这个NIO啊,NIO的话呢,它就是非阻塞式的。
12:07
啊,就是你这块该传还传不会呢,实现这个阻塞啊,别人呢,要想访问也可以来访问啊,细节呢咱们就先不多说了啊到后边呢,讲到框架的底层的时候呢,哎,咱们会给大家去说明一下这个NIO啊它的一个原理啊行,那这样的话呢,我们就把这个诶TCP的这样的三个例子呢,就说完了,哎大家呢下来呢,可以适当的写一写,诶除了这三个之外,课户呢还有两个练习,呃也是来练啊,谁给谁发数据这个事儿,比如像这个第二个客户端呢,给服务端呢发送文本,诶服务端呢,给它转换成大写呢,再返回来。哎,这个大家呢,可以去考虑一下如何去实现啊。
我来说两句