java网络编程:10、基于TCP的socket编程(三)缓冲流、flush方法、关闭流
发布日期:2021-06-29 01:43:16 浏览次数:3 分类:技术文章

本文共 1332 字,大约阅读时间需要 4 分钟。

声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!

文章目录


上篇讲了基于tcp的编程,服务器端循环监听接收多个客户端_多线程服务器程序,如需了解可参考 这篇我们了解一下里面的缓冲流、flush方法、关闭流带来的一些效果!我们以上篇服务器端的代码为例,对其进行改造。

一、使用缓冲流、注释流的关闭—带来的效果

在我们进行网络程序编写的时候,还有一个要注意的问题,我们可以简单看一下,如果说在服务器端当我们发送数据的时候,我们不直接用OutputStream 去发送数据,我想增加一个带缓冲的写入功能,那我就去创建一个BufferedOutputStream,通常我们还会将BufferedOutputStream在链接到其它的输出流上,比如说DataOutputStream,然后附加一个写入java基本数据类型的功能,但是当我们一旦构造这种带缓冲输入流、输出流的时候,我们就要注意它就会有一个问题了?

如上图改造以后,我们运行服务器端、客服端程序,我们可以发现对于客户端来说,它始终没有接收到数据,而我们的服务器端也没有接收到数据!因为我们客户端当它在读取数据的时候, 

int len= is.read(buf); 

因为它没有读到数据,所以这个操作就发生阻塞,发生阻塞那么下面的语句也就没有执行,

System.out.println(newString(buf, 0, len));os.write("Hello,this is zhangsan".getBytes());//输出流向服务器端发送数据

所以客户端向服务器端发送的这句代码也就没有得到调用 

os.write("Hello,this is zhangsan".getBytes());

所以服务器端也没有收到数据!也就是客户端和服务器都读取不到数据。

那么这个问题的发生主要是因为在服务器端,使用了带缓冲的输出流,当发送数据的时候执行语句

bos.write("Hello,welcome you,client!".getBytes());

那么这个数据是写在缓冲当中的,并没有通过网络发送出去,要等到这个缓冲满的时候,那么这个数据才会发送出去。

所以这是我们在网络编程当中,如果使用了带缓冲的输出流那么一定要注意了,带缓冲的输出流,会给我们网络通信造成一定的延迟。

二、使用flush方法—带来的效果

这时,我们可以调用一个flush方法,然后重新启动服务器端和客户端,我们发现就可以收到数据啦!

 

三、关闭流—带来的效果

那么有时候为了提高网络性能,比如说你再发送大块数据的时候,那么我们可能会利用这个缓冲的功能。但是我们有时候使用带缓冲的输出流输出数据的时候,那么又会造成一些问题。我们发送一个数据,那么接收方,它需要接收这个数据之后,才能进行下一步的动作,但是由于你使用了缓冲的功能,那么这个数据在缓冲区当中,没有实际发送出去,结果造成接收方,没有接收到这个数据。这时候我们在发送数据之后可以关闭我们的输出流,这样我们就不需要调用flush方法了。

另外要注意的是,在使用缓冲输出流的时候,会造成网络通信一定的延迟。

 

四、系列文章(java网络编程)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:https://blog.csdn.net/YuDBL/article/details/86063777 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java网络编程:11、基于UDP的socket编程(一)理论、基本步骤
下一篇:java网络编程:9、基于TCP的socket编程(二)服务器端循环监听接收多个客户端_多线程服务器程序

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月06日 22时25分03秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

HCIA_R&S-学习_Day03的副本 2019-04-29
测试文章11 2019-04-29
545454565645456445645465465 2019-04-29
发布测试 2019-04-29
32434 2019-04-29
ShuffleNet 2019-04-29
12321312321 2019-04-29
2132312 2019-04-29
213123 2019-04-29
21312 2019-04-29
sdhjfhasdhkjfhdsjkahfkjsahjk 2019-04-29
md封面图 2019-04-29
afhdsahfkjhdshfkjsjfhjahsj 2019-04-29
2020-07-21000 2019-04-29
欢迎使用CSDN-markdown编 2019-04-29
时间测试文章 2019-04-29
测试 bug 2019-04-29
新增代码块测试111 2019-04-29
sdfdsfdsa 2019-04-29
111112222 2019-04-29