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)