楼主,饿刚看了下你的代码
第一:最好只适用一个输出流,你使用了两个 out 跟 pw,这样的话会出一个异常---> java.net.SocketException: Connection reset by peer: socket write error ,还有就是想客户端输出数据的时候最好只输出一次就行了,不要发了一次,然后又发一次,貌似也会出现上面那个异常 java.net.SocketException: Connection reset by peer: socket write error ,你的pw输出了一次,然后 out 又输出了一次, 还有就是你的 fis 没有关闭,东西还在内存里面,没有刷出去,下面是饿改过的代码,运行通过,并且浏览器可以看到图片---->
常出现的Connection reset by peer: 原因可能是多方面的,不过更常见的原因是:
①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
②:客户关掉了浏览器,而服务器还在给客户端发送数据;
③:浏览器端按了Stop
package com.yting.tcp;
import java.net.*;
import java.io.*;
class TcpServerSocket {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(12141);
while (true) {
Socket s = ss.accept();
BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream());
System.out.println(s.getInetAddress().getHostAddress());
//PrintWriter pw = new PrintWriter(out, true);
//pw.println("欢迎访问我的服务器!");
//out.write(123456);
// 建立图片读取流对象,并写入ServerSocket流中,图片70.4kb
BufferedInputStream bis= new BufferedInputStream(new FileInputStream("刀剑神域.jpg"));
byte[] buf = new byte[1024];
int len = 0;
while ((len = bis.read(buf)) != -1) {
out.write(buf, 0, len);
}
bis.close();
out.close();
//pw.close();
s.close();
}
}
}
至于出的那个异常,饿也不知道怎么搞、、、
The you smile until forever 、、、、、、、、、、、、、、、、、、、、、、
|