Problem z przesłaniem danych serwer klient

0

Witam napisałem prostą aplikacje klienta oraz servera jednak mam pewien problem. Na serwerze znajduje się ArrayList przechowująca imiona osób zalogowanych do serwera. Chciałbym aby serwer wysyłał do wszystkich klientów informacje jakie osoby są aktualnie zalogowane i tu zaczynają się schody. Nie wiedziałem za bardzo jak to zrobić więc wymyśliłem sobie łopatologicznie że wszystkie imiona z ArrayList przepiszę do Stringa oddzielając je przecinkami następnie zmienię Stringa na tablice bytów i prześle do klienta po stronie klienta natomiast zrobię splita ze względu na "," przesłanego Stringa i otrzymam tablicę ze wszystkimi zalogowanymi użytkownikami. Niestety nie mogę zbudować Stringa z ArrayList , pierwsza pozycja zapisuje się dobrze natomiast gdy chce dodać następną nie mogę tego zrobić wyświetla mi jedynie imię które znajduje się na pierwszej pozycji w ArrayList. Prosiłbym kogoś o pomoc w rozwiązaniu tego problemu lub naprowadzenie na jakiś inny sposób.Pozdrawiam
kod servera ponieważ tu jest problem:

package udpserv;
 
import java.io.*;
import java.net.*;
import java.util.*;
 
public class Udpserv extends Thread {
 
   public final static int PORT = 7331;
   private final static int BUFFER = 1024;
   private static String s = "";
   private DatagramSocket socket;
   private ArrayList<InetAddress> clientAddresses;
   private ArrayList<Integer> clientPorts;
   private ArrayList<String> clientName;
   private HashSet<String> existingClients;
 
   public Udpserv() throws IOException {
      socket = new DatagramSocket(PORT);
      clientAddresses = new ArrayList();
      clientPorts = new ArrayList();
      existingClients = new HashSet();
      clientName = new ArrayList();
   }
 
   public void run() {
      byte[] buf = new byte[BUFFER];
      while (true) {
         try {
 
            Arrays.fill(buf, (byte) 0);
            DatagramPacket packet = new DatagramPacket(buf, buf.length);
            socket.receive(packet);
 
            String content = new String(buf, buf.length);
 
            InetAddress clientAddress = packet.getAddress();
            int clientPort = packet.getPort();
 
            String id = clientAddress.toString() + "," + clientPort;
            if (!existingClients.contains(id)) {
               existingClients.add(id);
               clientPorts.add(clientPort);
               clientAddresses.add(clientAddress);
               System.out.println(content);
 
               clientName.add(content);
            }
 
            for (int i = 0; i < clientName.size(); i++) {
               s = s + clientName.get(i) + ",";
               System.out.println(s);
            }
 
            byte[] data = s.getBytes();
            for (int i = 0; i < clientAddresses.size(); i++) {
               InetAddress cl = clientAddresses.get(i);
               int cp = clientPorts.get(i);
               packet = new DatagramPacket(data, data.length, cl, cp);
               socket.send(packet);
            }
         } catch (Exception e) {
            System.err.println(e);
         }
      }
   }
 
   public static void main(String args[]) throws Exception {
      Udpserv s = new Udpserv();
      s.start();
   }
} 
0

Spróbuj może zastąpić pętlę budującą Twój wynikowy string na pętlę "for_each":


for(String i : clientName)
s+= i + ",";

0

Nie pomaga to nadal nie dodaje nowych imion do stringa s dodaje sie tylko imie tego klienta ktory zaloguje sie jako pierwszy

1 użytkowników online, w tym zalogowanych: 0, gości: 1