Java: отправить список через сокеты

#java #sockets #object #client-server

#java #сокеты #объект #клиент-сервер

Вопрос:

Я хочу отправить список строк с моего клиента на сервер.

сервер

 ObjectOutputStream objectOutput = new ObjectOutputStream(connsock.getOutputStream());
public  List<String> current_clients_listening_songs = new ArrayList<String>();

current_clients_listening_songs.add("client 1 is listening to"   song);//song variable is string
//send list to client
objectOutput.writeObject(current_clients_listening_songs);
 

клиент

 ObjectInputStream objectInput = new ObjectInputStream(clientSocket.getInputStream());

//get list from server
Object get_client_listening = objectInput.readObject();

ArrayList<String> client_listening_songs = new ArrayList<String>();
//make a new list with server's list data
client_listening_songs = (ArrayList<String>) get_client_listening;
//print data
for (int i = 0; i < client_listening_songs.size(); i  ) {

    System.out.println(client_listening_songs.get(i));
    }
 

сервер добавляет элемент в список, но клиент их не получает, что не так?

Комментарии:

1. Вы пробовали отлаживать его?

2. да, он работает нормально, без ошибок

3. Многое может пойти не так, и из того, что вы опубликовали, неясно. Подключен ли клиент к серверу? Можете ли вы отправить простые данные (например, один байт) с сервера клиенту? Действительно ли сервер вызывает writeObject() ? Действительно ли данные отправляются по сети? Действительно ли клиент вызывает readObject() . Возвращает ли он или выдает? Что он возвращает? Видите ли вы какой-либо трафик в сети (для этого вы можете использовать Wireshark или tcpdump)?

4. @rveerd да для всех, мой клиент подключен к серверу. и он может отправлять данные по сети. и да, он вызывает writeObject() . есть ли какой-либо метод flush в writeObject?

5. Не уверен. Вероятно, есть такой вызов для выходных потоков или базового сокета. Вы должны использовать Wireshark или tcpdump, чтобы увидеть, что на самом деле отправляется по сети.