首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对等重置连接:尝试发送对象时出现套接字写入错误

问对等重置连接:尝试发送对象时出现套接字写入错误
EN

Stack Overflow用户
提问于 2016-06-08 20:56:58
回答 1查看 15.7K关注 0票数 0

所以当我尝试发送对象时,连接被同级重置:套接字写入错误,我不知道为什么。这只是我大学项目的一小部分,我花了很多时间来尝试它,但我真的没有想法了。如果能得到你的帮助,我将不胜感激。我尝试向客户端发送一条简单的字符串消息,它工作得很好。

服务器代码:

代码语言:javascript
复制
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();
    }       
  }
}

ServerConnection代码:

代码语言:javascript
复制
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();
}
}

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

代码语言:javascript
复制
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是否不为空,输出是否存在等。我不知道是什么触发了这个问题。

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

客户端控制台输出:

代码语言:javascript
复制
Exception in thread "main" java.lang.NullPointerException
    at Client.ClientConnection.getMap(ClientConnection.java:37)
    at Client.Client.main(Client.java:28)

客户端代码:

代码语言:javascript
复制
public static void main(String[] args) {
    ClientConnection c = new ClientConnection();
    c.connect();
    Map map = c.getMap();
    System.out.println(map);
    c.closeSocket();
}

ClientConnection:- serverString是本地adres "127.0.0.1“

代码语言:javascript
复制
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();
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-08 21:13:45

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

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

更改为以下内容:

代码语言:javascript
复制
Socket s = new Socket(serverString,7777);
this.s = s;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37703167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档