#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, чтобы увидеть, что на самом деле отправляется по сети.