Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SocketException:连接重置服务器_Java_Sockets_Server_Socketexception - Fatal编程技术网

Java SocketException:连接重置服务器

Java SocketException:连接重置服务器,java,sockets,server,socketexception,Java,Sockets,Server,Socketexception,我正在做一个与服务器相关的项目。这是服务器代码: public class Server { public final int PORT = 8888; private ServerSocket server; private ArrayList<HandlerOut> arrayout= new ArrayList<HandlerOut>(); private HashMap <String,ArrayList <Mens

我正在做一个与服务器相关的项目。这是服务器代码:

public class Server {

    public final int PORT = 8888;

    private ServerSocket server;
    private ArrayList<HandlerOut> arrayout= new ArrayList<HandlerOut>();
    private HashMap <String,ArrayList <Mensagem>> hashmensagens = new HashMap<String , ArrayList <Mensagem>>();

    public Server() {
        try {
            this.startServing();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void startServing() throws IOException {
        server = new ServerSocket(PORT);
        System.out.println("Lançou ServerSocket: " + server);
            while(true) {
                System.out.println("A aceitar...");
                Socket socket = server.accept();
                System.out.println(socket);
                ObjectOutputStream output = new ObjectOutputStream (socket.getOutputStream());
                output.flush();
                ObjectInputStream input = new ObjectInputStream (socket.getInputStream());
                HandlerIn hi = new HandlerIn(this, input, output);
                hi.start();
            }   
    }

    public ArrayList<HandlerOut> getArrayout() {
        return arrayout;
    }

    public HashMap<String, ArrayList<Mensagem>> getHashmensagens() {
        return hashmensagens;
    }

    public static void main(String[] args) {    
        Server s = new Server();
    }   

} 
问题是我忘了在
HandlerIn
代码中添加
ho.start()
行,但当我这样做时,服务器会一次又一次地抛出此异常,同时:

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.ObjectInputStream$PeekInputStream.peek(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.peek(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at HandlerIn.run(HandlerIn.java:27)
我该如何解决这个问题

__________________________________编辑_______________________________________ 这是客户端代码:

public class Login {
        public static int PORT = 8888;
        public void init(){
        (...)
        Client c = null;
        b = true;
        try {
            Socket socket = new Socket(InetAddress.getByName(null), PORT);
            c = new Client(socket, v[1], v[0]);                                 
        } catch (IOException e1) {
            System.out.println("Conexao falhada");
        } 
        if(c != null){
        QuequeApp quequeapp = new QuequeApp();
        Mensagem m = new Mensagem(c.getUsername(), null, null);
        try {
            c.getOutput().writeObject(m);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        (...)
    }
}
客户机在登录后立即发送一条消息,以便向服务器标识自己

在这一侧,控制台反复显示:

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.peek(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.peek(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at HandlerIn.recebeMensagem(HandlerIn.java:31)
at HandlerIn.run(HandlerIn.java:75)

注意:中的此处理程序不是服务器处理程序。它的第31行是
m=(Mensagem)input.readObject()

@engineer它是
m=(Mensagem)input.readObject()这通常是由于发送端出现问题。感谢您的帮助,但我只需要在另一端关闭时关闭插槽
public class Login {
        public static int PORT = 8888;
        public void init(){
        (...)
        Client c = null;
        b = true;
        try {
            Socket socket = new Socket(InetAddress.getByName(null), PORT);
            c = new Client(socket, v[1], v[0]);                                 
        } catch (IOException e1) {
            System.out.println("Conexao falhada");
        } 
        if(c != null){
        QuequeApp quequeapp = new QuequeApp();
        Mensagem m = new Mensagem(c.getUsername(), null, null);
        try {
            c.getOutput().writeObject(m);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        (...)
    }
}
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.peek(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.peek(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at HandlerIn.recebeMensagem(HandlerIn.java:31)
at HandlerIn.run(HandlerIn.java:75)