Android-Socket не отправляет пользовательские объекты - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь отправить пользовательский объект (Info) с помощью сокета с сервера на клиент. Код класса информации:

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


public class Info implements Serializable {


    private static final long serialVersionUID = -8967456786256719218L;


    private String ip;
    private int port;
    private List<String> responsibilityLines;


    public Info(String ip, int port, List<String> responsibilityLines) {
        this.ip = ip;
        this.port = port;
        this.responsibilityLines = responsibilityLines;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public int getSubscriberPort() {
        return port;
    }

    public void setSubscriberPort(int port) {
        this.port = port;
    }

    public List<String> getResponsibilityLines() {
        return responsibilityLines;
    }

    public void setResponsibilityLines(ArrayList<String> responsibilityLines) {
        this.responsibilityLines = responsibilityLines;
    }

    @Override
    public String toString() {
        return "Info{" +
                "ip='" + ip + '\'' +
                ", port=" + port +
                ", responsibilityLines=" + responsibilityLines +
                '}';
    }
 }

Соединение с сокетом установлено, и любой другой объект Java или тип примитива успешно отправлен. Однако, когда я пытаюсь отправить список Info объектов, клиент блокируется и ожидает получения (что никогда не происходит). Для отправки объекта с сервера я использую:

 List<Info> infoList = new ArrayList<>();
 Info inf = new Info("192.168.78.45", 3456, null);
 infoList.add(inf);
 dos.writeObject(infoList);
 dos.flush();

и для получения предмета я использую:

List<Info> infoList;
infoList = (List<Info>) dis.readObject();

где dos - это ObjectOutputStream, а dis - это ObjectInputStream.

1 Ответ

0 голосов
/ 12 мая 2019

Используйте ByteArrayOutputStream в качестве значения для ObjectOutputStream()

ByteArrayOutputStream bos = new ByteArrayOutputStream()
ObjectOutputStream oos = new ObjectOutputStream(bos)
oos.writeObject(infoList)
oos.close

учитывая, что ваш сервер знает, кто должен анализировать информацию класса.

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