android java关闭数据,Android—Socket中关闭IO流后导致Socket关闭不能再收发数据的解决办法...

在Java Socket编程中,遇到发送图片到服务器时,关闭DataOutputStream会导致客户端socket受影响。使用socket.shutdownOutputStream()能关闭输出流但保持连接。然而,如何在关闭后重新打开DataOutputStream进行后续数据发送是一个挑战。目前的解决方案是检查输出流是否关闭,如果关闭则重新创建Socket。寻求更好的处理方法。
摘要由CSDN通过智能技术生成

以Socket发送数据为例:

发送数据时候要声明:DataOutputStream os = new DataOutputStream(socket.getOutputStream());

最近开发遇到的为题是我要向服务端发送图片,如果os.close()的话服务器可以收到图片但是我客户端的socket会受影响关闭。如果不用os.close()的话,服务器接收图片会有影响,查资料说调用socket.shutdownOutputStream();可以关闭输出流,而且不会影响socket发送数据。

但是问题来了:DataOutputStream关闭了,但是客户端还要继续发送数据怎样打开DataOutputStream呢?

本人没有百度到合适的回答,所以再次发送数据的时候先判断一下输出流有没有被关闭,如果被关闭的话,就再new一个Soket。。。。(个人感觉这个方法不虽然解决了当前的问题,但不是最好的,如果大家有更好的解决方案,请留言,不胜感激!!!!)

public void sendObject(String obj) throws IOException {

//判断输出流是否已经关闭,如果关闭就重新new Socket

if (socket.isOutputShutdown()) {

socket = new Socket(SERVERIP, PORT);

}

DataOutputStream os = new DataOutputStream(socket.getOutputStream());

// os.write(obj.getBytes());

os.writeUTF(obj);

os.flush();

System.out.println("客户端发送" + obj + "到服务器");

}

如果有好的方法,感谢留言!!!

Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutpu ...

Java中的IO流(二)

上一篇把学习IO流的字符流作了一下记录,本篇把字节流记录一下. 一,Java中的字节流 Java中的字节流的操作方式与字符流的操作方式大致相同,连方法名都是类似 ...

Java中的IO流 - 入门篇

前言 大家好啊,我是汤圆,今天给大家带来的是,希望对大家有帮助,谢谢 由于Java的IO类有很多,这就导致我刚开始学的时候,感觉很乱,每次用到都是上网搜,结果 ...

【已解决】Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8

[问题] 折腾: [已解决]Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8 过程中,增大对应AVD的内存为2G后,结果无法启 ...

Java中的IO流,Input和Output的用法,字节流和字符流的区别

Java中的IO流:就是内存与设备之间的输入和输出操作就成为IO操作,也就是IO流.内存中的数据持久化到设备上-------->输出(Output).把 硬盘上的数据读取到内存中,这种操作 成为 ...

Java中的IO流(五)

上一篇记录了一下Properties类,此类不属于IO流,它属于集合框架.接下来说一下IO流中的其它流 一,打印流PrintStream PrintStream ...

Java中的IO流(六)

上一篇把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...

Java中的IO流之输出流|乐字节

大家好,乐字节小乐又来了.上一篇给大家带来的是:Java中的IO流之输入流|乐字节,本文将继续讲述IO流之输出流.   一.输出流 1.抽象类:OutputStream 和 Writer Output ...

Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8 (转)

Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8http://www.crifan.com/android_emulator_ ...

随机推荐

TCP那些事

本文是的读书笔记 1 TCP简介 TCP提供一种可靠的.面向连接的字节流服务.TCP通过下面的方式来保证服务是可靠的: 应用程序被分隔成TCP认为最适合发送 ...

Spring学习记录(七)---表达式语言-SpEL

SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...

js中的等值运算符(抽象相等==与严格相等===的区别)

js中的等值运算符 js中的相等分为抽象相等和严格相等,他们有什么区别呢. 在说具体算法前,先提下JS数据类型,JS数据类型分为6类:Undefined Null String Number Bool ...

linux包的相关命令

apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明.大小.版本等 sudo apt-get install package ...

Android:自定义标题栏

现在很多的Android程序都在标题栏上都显示了一些按钮和标题,这里尝试做个实例 在onCreate中添加: //自定义标题 requestWindowFeature(Window.FEATURE_C ...

jq实现点击按钮后倒计时,多用于手机验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值