Сериализация сокета - PullRequest
       5

Сериализация сокета

2 голосов
/ 11 марта 2011

Я попытался сериализовать сокет, но он не работал. как правильно?

public class MySocket implements Serializable
{
    private Socket socket;

    public MySocket(Socket socket) {
        this.socket = socket;

    }
    public Socket getSocket() {
        return socket;
    }
    public void setSocket(Socket socket) {
        this.socket = socket;
    }

}

Ответы [ 4 ]

9 голосов
/ 11 марта 2011

По своему замыслу Socket экземпляры нельзя сериализовать - вы не можете сохранить их или передать по сети, что не имеет никакого смысла. В зависимости от того, что вы пытаетесь сделать, вам нужно каждый раз устанавливать новый сокет, а не сохранять его на диск и т. Д.

1 голос
/ 25 сентября 2012

Что ж, в программировании сокетов, когда вы говорите serialize, это означает, что объект должен быть "сериализуемым", а не сокетом, который он сам.

inSomeclass's method {
     ...
     ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
     out.writeObject(new MyClass());
     out.flush();
     ...
}

class MyClass implements Serializable {
     // some sort of variables and objects, whatever ....
} 
1 голос
/ 08 февраля 2012

Сокет в основном является файловым дескриптором на системном уровне, похожим на файл.Это просто целое число.Его можно сериализовать, но это не имеет смысла.Когда сокет закрыт, дескриптор файла больше не имеет смысла.Это также не имеет смысла, если вы используете его на другом компьютере.

0 голосов
/ 11 марта 2011

Это не будет работать, поскольку переменная-член "socket" не сериализуема.

Вы хотите сериализовать что-то через сокет?В этом случае должен быть сериализован класс с данными, а не тот, который обрабатывает сокеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...