gpt4 book ai didi

java - 连接被对等方重置 : socket write error While tring to send object

转载 作者:行者123 更新时间:2023-12-01 09:49:25 27 4
gpt4 key购买 nike

所以我在尝试发送对象时遇到 Connection Reset by Peer: socket write error ,我不知道为什么。这是我大学项目的一小部分,我花了很多时间试图让它发挥作用,但我真的没有想法。我将非常感谢您的帮助。我尝试向客户端发送一条简单的字符串消息,效果很好。

服务器代码:

public class Server {
static ServerSocket serverSocket;

public static void main(String args[]) {
try {
serverSocket = new ServerSocket(7777);
Map map = new Map();
while(true)
{
Socket incoming = serverSocket.accept();
System.out.println(incoming.toString());
Runnable r = new ServerConnection(incoming, map);
Thread t = new Thread(r);
t.start();
}
}
}

服务器连接代码:

public class ServerConnection implements Runnable {
private Socket s;
private ObjectOutputStream out;
private Map map;
public ServerConnection(Socket out, Map map){
this.s = out;
this.map = map;
System.out.println(map);
}

public void sendMap(){
//map.setRotation(rotated);
try {
out = new ObjectOutputStream(s.getOutputStream());
System.out.println(out);
System.out.println(this.map);
out.writeObject(this.map);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public void closeSocket(){
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

@Override
public void run() {
//this.connect();
this.sendMap();
}
}

打印堆栈跟踪提供以下信息:

java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)`
at java.io.ObjectOutputStream.writeFatalException(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Server.ServerConnection.sendMap(ServerConnection.java:39)
at Server.ServerConnection.run(ServerConnection.java:59)
at java.lang.Thread.run(Unknown Source)

是的,我检查了 Map 是否不为空以及输出是否存在等。我不知道是什么触发了问题。

编辑:-对象映射是可序列化的。

客户端控制台输出:

Exception in thread "main" java.lang.NullPointerException
at Client.ClientConnection.getMap(ClientConnection.java:37)
at Client.Client.main(Client.java:28)

客户端代码:

public static void main(String[] args) {
ClientConnection c = new ClientConnection();
c.connect();
Map map = c.getMap();
System.out.println(map);
c.closeSocket();
}

ClientConnection: - serverString 是本地地址“127.0.0.1”

public void connect(){
try
{
Socket s = new Socket(serverString,7777);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public Map getMap(){
Map map;
try {
input = new ObjectInputStream(s.getInputStream());
map = (Map)(input.readObject());
return map;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void closeSocket(){
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

最佳答案

连接被peer重置意味着对方关闭了连接。既然您显示的是服务器端程序,那么客户端必须是关闭它的程序。检查客户端代码和控制台输出。

编辑:您没有将 s 分配给类字段,因此调用 getMap 时它始终为 null。

更改为:

Socket s = new Socket(serverString,7777);
this.s = s;

关于java - 连接被对等方重置 : socket write error While tring to send object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37703167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com