Как вы отправляете пользовательский объект класса через сетевое соединение TCP / IP в Java? - PullRequest
2 голосов
/ 11 мая 2011

Это пример пользовательского класса, который я хотел бы отправить из клиентского приложения в серверное приложение:

class dataStruct implements Serializable{
    byte data;
    int messageNum;
    public void setData(byte datum, int messageNumber){
        data=datum;
        messageNum=messageNumber;
    }
}

Как отправить пользовательский класс через соединение tcp / ipв Java?

Какие типы потоков я могу использовать для этого (если я отправляю больше, чем просто текст)?

Могу ли я передать полный объект через поток сокетов, или будетМне всегда приходилось приводить его после того, как он был передан через поток?

Я пишу приложение сервер / клиент, и мне удалось найти учебники только с примерами примитивных типов или передаваемых строкчерез сетевое соединение - не определенные пользователем типы.

Ваша помощь и руководство очень ценятся.

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Пусть объекты реализуют интерфейс маркера Serializable, а затем передают объекты, используя ObjectOutputStream и ObjectInputStream. Когда объект выходит на другой конец, он будет через метод readObject() на ObjectInputStream, который возвращает Object, так что да, вам нужно будет привести его к нужному типу.

3 голосов
/ 11 мая 2011

Используйте ObjectOutputStream на передающей стороне и ObjectInputStream на принимающей стороне.

Чтобы быть немного более понятным, вот пример (без обработки исключений).

отправляющая сторона:

dataStruct ds = ...;
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(ds);
oos.close();

принимающая сторона:

ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
Object o = ois.readObject();
if(o instanceof dataStruct) {
   dataStruct ds = (dataStruct)o;
   // do something with ds
}
else {
   // something gone wrong - this should not happen if your
   // socket is connected to the sending side above.
}

Так что да, вы должны приводить на принимающей стороне, чтобы компилятор знал правильный класс.(Приведение не меняет класс объекта, а только изменяет знания компилятора о нем.)

Эта сериализация также используется для сохранения объектов в файл.Конечно, это дает только возможность взаимодействия с Java, если у вас есть не-Java-партнер, вы можете использовать собственный протокол сериализации или какой-либо формат на основе XML.

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