ServerSocket

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo,

ich möchte mich zu einem Server mit mehreren Clients verbinden, möchte aber nur einen Port verwenden.

Ist es möglich bzw. sinnvoll, wenn ich mehrere Sockets habe (welche von ServerSocket#accept() zurückgegeben wurde), und diese Sockets in einen dynamischen Array verwalte??

Ich habe bedenken über die Verwaltung der hereinkommenden Daten, ob ich diese unterscheiden kann,

Vielen Dank für Eure Antworten,

lg
 

sparrow

Top Contributor
Du kannst die zurückgegebenen Sockets verwalten wie du möchtest.
Die Unterscheidung kommt auf dein Programm an und was du gemacht hast.
Jeder Socket ist genau eine Verbindung.

Gruß
Sparrow
 

PollerJava

Top Contributor
Hätte noch eine Frage zu diesem Thema und zwar habe ich jetzt am ServerProgramm mehrere Sockets je nach Anzahl der Clients, jedesmal wenn sich ein Client zum Server verbindet dann wird eben ein socket auf nur einen Port (300) aufgemacht:

Code:
serverSocket = new ServerSocket(port);
            while (true) 
                {
                sock[cnt] = serverSocket.accept();
                DataServerThread dsth;
                (dsth = new DataServerThread("DataServerTcpipVerbindung " + cnt, sock[cnt])).start();                    
                dsth.setName("DataServerTcpipVerbindung");
                ++cnt;
                }

und der DataServerThread:

Code:
class DataServerThread extends Thread
    {
    private String name;
    private Socket socket;
    private InputStream sockIn;
    private OutputStream sockOut;
 
    public DataServerThread(String name, Socket socket)
        {
        this.name   = name;
        this.socket = socket;
        }
 
    @Override public void run()
        {
        try {
            sockIn = socket.getInputStream();
            sockOut = socket.getOutputStream();
            ...
            sockOut.write(sendBuf, 0, 4);      // zu welchemm Client wird das gesendet, passt das schon, wenn ich eben mehrere Sockets habe oder wie kann ich das unterscheiden??????

Meine Frage wäre jetzt, wenn ich in den einzelnen DataServerThreads "sockOut.write(sendBuf, 0, 4);" schreibe, ob das dann auch an den richtigen Client geht oder was ich da noch machen muss, damit das so funktioniert??


PS: zur Erklärung: ich habe einen ServerProgramm mit dem ich nur einen PORT aufmachen möchte (Port 300),
zu diesem Server sollen sich jetzt mehrere Clients verbinden können, mir gehts also oben um die unterscheidung der Clients am Server
 

der JoJo

Bekanntes Mitglied
Ich verstehe dein Problem nicht, du hast doch für jeden client einen eigenen thread mit einem eigenem socket.
Das Heist, wenn du in dem Thread von client A etwas auf den Socket schreibst, dann kommt das auch bei Client A an.

zur unterscheidung der Clients kannst du ja die ip verwenden (die müsstes du iwie vom socket bekommen)
 
S

SlaterB

Gast
die einzelnen
sock[cnt] = serverSocket.accept();
sind unterschiedliche Sockets mit zufälliger Portnummer (kann man abfragen),
auf 300 lauscht nur der Server nach Verbindungen,

die Clients schicken ihre Daten dann auch nicht nach 300 sondern an den richtigen Port, passiert alles automatisch
 

PollerJava

Top Contributor
aha, ok

und wie kann ich die Sockets dynamisch anlegen? Muss ich auf verdacht mal ein Array einer bestimmter größe machen:

Code:
Socket[] sock = new Socket[20];

oder kann ich das ganze dynamisch auch machen?

lg
 

der JoJo

Bekanntes Mitglied
du brauchst die sockets doch eigendlich garnicht extra zu speichern, schlieslich sind die ja in den threads gesichert.
es seiden die clients sollen untereinander communizieren, dann würde ich mich einfach maki anschließen
 

Saxony

Top Contributor
Hiho,

interessante Themen in diesem Zusammenhang, wären vielleicht auch Thread-Pooling und nonblocking SocketChannels der NIO API.

Literatur hierzu:
Java Network Programming
Java NIO
Java Threads

Alles ausm O'Reilly Verlag.

bye Saxony
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben