当前位置: 代码迷 >> J2SE >> shutdownOutput()使用促成Connection Rest
  详细解决方案

shutdownOutput()使用促成Connection Rest

热度:234   发布时间:2016-04-23 20:20:41.0
shutdownOutput()使用造成Connection Rest

目的是用TCP做一个简单的文本上传功能

这是客户端

import java.net.*;
import java.io.*;
class  TextClient  
{

public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.1.103",10005);
//定义读取键盘数据对象
BufferedReader bufr = 
new BufferedReader(new FileReader("TransClient.java"));  
//定义目的,将数据写入socket输出流,发给服务器
PrintWriter out = new PrintWriter(s.getOutputStream(),true);



String line = null;
while((line=bufr.readLine())!=null)
{
out.println(line);
}

s.shutdownOutput();

BufferedReader bufIn = 
new BufferedReader(new InputStreamReader(s.getInputStream()));


String str = bufIn.readLine();

System.out.println(str);

bufr.close();
s.close();

}
}


这是服务端

class  TextServer 
{

public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10005);

Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println("IP::"+ip);

BufferedReader bufIn = 
new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out = 
new PrintWriter(new FileWriter("CopyOfTransClient.java"),true);  




String line = null;
while((line=bufIn.readLine())!=null)
{
//if("over".equals(line))
// break;
out.println(line);
}


PrintWriter pw = 
new PrintWriter(s.getOutputStream(),true);

pw.println("上传成功");

out.close();
s.close();
ss.close();

}
}


没有s.shutdownOutput() 能正常使用
客户端可以得到上传成功字段
加了shutdownOutput()表示结束后就报错了

因为我是看视频学习,视频上的代码和我一样的 所以不知道问题出哪里?
谢谢帮助~~

------解决方案--------------------
 while((line=bufr.readLine())!=null)
        {    
            out.println(line);
        }
 
        <span style="color: rgb(255, 0, 0);">s.shutdownOutput();</span>
应该是你没有发送完,就进行了shutdownOutput操作。
------解决方案--------------------
引用:
引用:while((line=bufr.readLine())!=null)
        {    
            out.println(line);
        }
 
        <span style="color: rgb(255, 0, 0);">s.shutdownOutput();<……



=========================
执行out.flush();试一试。
------解决方案--------------------
引用:
引用:引用:引用:while((line=bufr.readLine())!=null)
        {    
            out.println(line);
        }
 
        <span style="……

===========================================
我测试了你的代码,没有问题,采用加延迟让SERVER提前完成,错误也是读数据超时。
没有遇到这种问题,加临时QQ:1906294143,如果需要,我可以帮你看一下。
------解决方案--------------------
异常是发生在BufferedReader bufIn = 
            new BufferedReader(new InputStreamReader(s.getInputStream()));

结合异常来看应该是你的服务端过早的关闭了,试着延迟关闭服务端看看会不会还出现这个异常
  相关解决方案