今天尝试用socket编写一个文件传输的小程序,运行后一直报以下错误:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:113)
at java.net.SocketInputStream.read(SocketInputStream.java:90)
at com.socket.Server.begin(Server.java:41)
at com.socket.Server.run(Server.java:24)
下面是我编写socket  Server的代码: package com.socket;import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread {
public static final int PORT = 9876;
ServerSocket s = null; Server() throws IOException {
s = new ServerSocket(PORT);
} @Override
public void run() {
try { while (true) {
Socket socket = s.accept();
begin(socket);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void begin(Socket socket) {
int flag = 0;
byte b[] = new byte[1024];
while (true) {
InputStream in;
BufferedOutputStream bos;
try {
in = socket.getInputStream();
bos = new BufferedOutputStream(new FileOutputStream("d:/a.txt"));
while ((flag = in.read(b)) > 0) {
bos.write(b, 0, flag);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } } public static void main(String[] args) throws IOException {
Server s = new Server();
s.start();
}
}求指教!谢谢了!

解决方案 »

  1.   

    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at java.net.SocketInputStream.read(SocketInputStream.java:90)
    at com.socket.Server.begin(Server.java:41)对方关闭了连接,所以读取失败了。检查你Client端的代码吧。
      

  2.   

    Client端检查过了 没问题。
      

  3.   

    服务端有两个小问题:
    1、没有启用线程去处理 begin() 会阻塞主线程,这样导致只能服务一个Client;
    2、being()中是死循环,没有退出条件,按理来说当流度取不到数据时,意味着对方已经关闭OutputStream:此时应终止退出循环,关闭Socket。第二个问题也许是引发异常的原因。
    // while (true) {  // 不需要这个东西
             InputStream in;
             BufferedOutputStream bos;
             try {
                    in = socket.getInputStream();
                    bos = new BufferedOutputStream(new FileOutputStream("d:/a.txt"));
                    while ((flag = in.read(b)) > 0) {
                           bos.write(b, 0, flag);
                    }
             } catch (IOException e) {
                    e.printStackTrace();
             } finally {
                    socket.close();   
             }
    // } // 一起取消