标签:outputStream ok Socket TCP 报错 close buf readlen 客户端
Socket会在所有io流关闭后自动关闭。错误代码如下:
OutputStream outputStream = socket.getOutputStream();
outputStream.write("Client is sending message".getBytes(StandardCharsets.UTF_8));
socket.shutdownOutput();
outputStream.close();
InputStream inputStream = socket.getInputStream();
byte[]buf=new byte[1024];
int readlen=0;
while((readlen=inputStream.read(buf))!=-1)
{
System.out.println(new String(buf,0,readlen));
}
inputStream.close();
System.out.println("客户端退出");
可以看到在inputstream创建之前outputstream已经关闭了,由于在服务器端代码如下:
int ok=0;
while((readlen=inputStream.read(buf))!=-1)
{
ok=1;
System.out.println(new String(buf,0,readlen));
}
OutputStream outputStream=null;
if(ok==1) {
outputStream = accept.getOutputStream();
outputStream.write("I know.".getBytes(StandardCharsets.UTF_8));
accept.shutdownOutput();
}
if(outputStream!=null) outputStream.close();
inputStream.close();
accept.close();
serverSocket.close();
System.out.println("server exit with ok");
运行结果输出了server exit with ok
可以看出服务器端是正常运行的,两端的输入输出流互不影响。客户端输入流输出数据,服务器端接受到数据,此时客户端关闭了输出流(错误)
关闭后客户端的socket自动关闭了,后面客户端又想用socket的getInputStream方法所以会报错。
解决方法就是把客户端的outPutStream.close()语句挪到下面,所有io流一起关闭。
标签:outputStream,ok,Socket,TCP,报错,close,buf,readlen,客户端 来源: https://blog.csdn.net/qq_52612346/article/details/120463594
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。