ServerSocket prinzipielle Frage

Status
Nicht offen für weitere Antworten.

akira

Bekanntes Mitglied
Hallo,

ich habe vor, ein kleines Multiplayer-Onlinespiel auf der Basis von Applets als Clients und einem Server zu realisieren.
In Java bin ich eigentlich recht fit, jedoch habe ich noch nie mit Sockets gearbeitet. Wie ich einen ServerSocket öffne ist mir klar, auch das die Methode .accept() auf eingehende Requests wartet. Die Methode liefert nun einen Socket, über den per Input-/OutputStream gelesen bzw. geschrieben werden kann. Für EINEN Client ist das soweit alles klar.

Ich möchte jedoch natürlich mehrere Clients gleichzeitig mit dem Server verbinden. Ich habe in diesem Zusammenhang gelesen, daß man nun im Server für jeden Socket, den man per accept erhalten hat, einen neuen Thread öffnet.

Nun zu meinen Fragen:

1. Können also mehrere Sockets auf einem Port zur gleichen Zeit laufen?
2. Bleibt ein Socket während der gesamten Kommunikation mit einem Client bis zur Abmeldung offen, oder wird für jeden Request ein neuer geöfnet?

Ich hoffe, ihr könnt mir da bei meinem Verständnisproblem helfen.
 
R

Roar

Gast
ok.
also 1. ja sicher kann man gleichzeiotig mehrer sockets auf einem port bedienen, wie du schon gesagt hast mit multithreading
2. das kommt drauf an. bei HTTP zum beispiel läufts so ab dass der client eine nrequest shcickt und der server die entsprechende datei zurückschickt. danach wird der socket direkt geschlosssen. Bei FTP bleibt der socket längere zeit offen und shcließt sich irgendwann automatisch per timeout wenn über eine bestimmte zeit kein kommando gesendet wurde.

Hier ein kleines bneispiel aus meinem http server:

Code:
//...

ServerSocket httpd = new ServerSocket(80); // ServerSocket initalisiere
while (true) {
Socket socket = httpd.accept();
ClientThread clientThread = new ClientThread(socket); // neuen thread für request
clientThread.start();
}

//...

import java.io.*;
import java.util.*;
import java.net.*;
import net.roarsoftware.net.HTTPRequest; // parst den HTTP request

class ClientThread extends Thread implements net.roarsoftware.net.HTTPConstants {

private Socket s; // socket
private InputStream is; // io streams...
private PrintStream ps;
//...
public ClientThread(Socket s) throws IOException {
this.s = s;
this.is = s.getInputStream();
this.ps = new PrintStream(s.getOutputStream());
//...

public void run() {
java.awt.Toolkit.getDefaultToolkit().beep();
StringBuffer sb = new StringBuffer();
try{ 
// read request
int c;
while ((c = is.read()) != -1) {
if (c == '\n') {
         if (sb.substring(sb.length()-3).equals("\r\n\r")) {
           break;
         }
}
sb.append((char)c);
}
} catch(IOException ex) {
httpError(500, "Internal Server Error", "Error occured on reading Request. " + ex.getMessage() ); // httpError sendet eine fehlerseite an den client
}
String[] lines = HTTPRequest.parseRequest(sb.toString());
//....
// pars den hhtp request und antworte entsprechen

private void httpError(int code, String type, String description) { // beispiel um daten an die nclient zurückzusenden
ps.print("HTTP/1.0 " + code + " " + type + "\r\n");
ps.print("Content-type: text/html\r\n\r\n");
ps.println("<html>");
ps.println("<head>");
ps.println("<title>" + code +" " + type + "</title>");
ps.println("</head>");
ps.println("<body>");
ps.println("<h1>" + type + "</h1>");
ps.println("

" + description);
ps.println("<hr>[i]Requestor 8-D 1.0 Server at " + host + " Port " + port + "[/i]");
ps.println("</body>");
ps.println("</html>");
}
 

akira

Bekanntes Mitglied
Danke, für Deine schnelle Antwort.

Am idealsten für mich wäre es, wenn die Socketverbindung vom einloggen bis zum ausloggen (das einige Stunden dauern kann) andauern würde. Wäre das also möglich, oder gibt es irgendwann einen timeout?
 
R

Roar

Gast
du kannst den timeout beim socket setzen. eigentlich sollte die verbindung solange stehen bis entweder der client oder der server den socket schließt. einfach ausprobieren.
 

Dante

Bekanntes Mitglied
Hi,

der Serversocket belegt den Port an den er gebunden wird, wenn nun eine neue Verbindung auf diesem Port eingeht, wir diese vom Betriebssystem auf einen anderen freien Port umgeleitet, meist in der fünfstelligen Region. Somit läuft alle weitere Kommunikation mit dem Socket den accept() zurückgegeben hat auf einem ganz anderen Port. Wenn nun der ServerSocket zB. durch eine Schleife wieder in accept() ankommt, kann er weitere Verbindungen annehmen die dann analog wieder auf einen anderen Port umgeleitet werden.

Wenn du den Socket nicht schliesst und du ihm keinen timeout (Socket.setSOTimeout()) zugewiesen hast bleibt der ewig offen.
 

akira

Bekanntes Mitglied
Vielen Dank für eure Antworten, jetzt ist mir die Sache schon viel klarer.

Ich habe mir mittleiweile auch schon das Grundgerüst des Servers gschrieben und werde das
jetzt mal mit ein paar Clients testen..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Custom E Mail Adresse mithilfe Serversocket oder ähnliches Netzwerkprogrammierung 21
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
D ServerSocket - Socket Verbindungsart Netzwerkprogrammierung 3
J 1 Socket - 2 Serversocket Netzwerkprogrammierung 4
J Client - Serversocket Netzwerkprogrammierung 1
Seikuassi Socket ServerSocket mehrmals erzeugen Netzwerkprogrammierung 1
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
J ServerSocket sauber beenden Netzwerkprogrammierung 3
H ServerSocket.accept() unterbrechen Netzwerkprogrammierung 3
TheJavaKid ServerSocket beendet mit PuTTy Netzwerkprogrammierung 9
T ServerSocket.accept Rückgabetyp casten Netzwerkprogrammierung 3
P Socket Daten senden mit ServerSocket? Netzwerkprogrammierung 2
4 Socket Kann kein ServerSocket erstellen Netzwerkprogrammierung 4
D Socket ServerSocket Push Netzwerkprogrammierung 5
G ServerSocket.accept() überschreibt IP-Adresse Netzwerkprogrammierung 4
C serversocket.accept() klappt nicht Netzwerkprogrammierung 10
Tobse HTTP ServerSocket HTTP Netzwerkprogrammierung 4
X FAQ Frage - Netzwerkgrundlagen - ServerSocket und Socket Netzwerkprogrammierung 4
M Wahrnehmen, dass ServerSocket geschlossen wurde Netzwerkprogrammierung 14
T ServerSocket bleibt beim lesen von Input hängen Netzwerkprogrammierung 2
M ServerSocket.accept() abbrechen Netzwerkprogrammierung 8
Schandro Herausfinden ob hinter einem Port bereits ein ServerSocket steckt Netzwerkprogrammierung 2
2 Class mit ServerSocket erbt von Thread? Netzwerkprogrammierung 3
T Java Socket und ServerSocket über Internet-IP? Netzwerkprogrammierung 9
dayaftereh serverSocket.accept(); Wecken Netzwerkprogrammierung 2
G Frage zu Serversocket-Beispiel aus der FAQ Netzwerkprogrammierung 17
D Komisches Fenster bei Serversocket Netzwerkprogrammierung 2
M Kommunikation zwischen ServerSocket und Socket Netzwerkprogrammierung 2
F ServerSocket im internet zugänglich machen Netzwerkprogrammierung 15
H ServerSocket -> Zugriff nur von localhost Netzwerkprogrammierung 6
P Serversocket schmeißt immmer EOFEXCEPTION Netzwerkprogrammierung 2
A serversocket soll anfrage vom handy entgegennehmen Netzwerkprogrammierung 4
P Problem mit Socket und ServerSocket Netzwerkprogrammierung 2
S ServerSocket merkt nicht, wenn keiner mehr da ist Netzwerkprogrammierung 8
J ServerSocket vs. DatagramSocket Netzwerkprogrammierung 2
D Problem ServerSocket global Netzwerkprogrammierung 3
J ServerSocket schließen / öffnen im Programmverlauf Netzwerkprogrammierung 4
G einfache Frage zu ServerSocket ... Netzwerkprogrammierung 5
J Frage zum Keystore Netzwerkprogrammierung 21
E Socket Frage Netzwerkprogrammierung 6
T Frage bzgl. Socket-API Netzwerkprogrammierung 1
C Jetty 9 Non Blocking Handler Frage... Netzwerkprogrammierung 1
O log4j Appender Frage Netzwerkprogrammierung 6
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
C Frage zu Threads & Server Netzwerkprogrammierung 4
P Eine etwas andere Frage: Sicherheit Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
M allgemeine Frage zu einem Web Service Client Netzwerkprogrammierung 2
Q Frage zur Socketprogrammierung Netzwerkprogrammierung 12
D HTTP Frage zu Login & Session ID Netzwerkprogrammierung 5
D HTTP nochne frage zu http requests Netzwerkprogrammierung 6
D "Fileserver" Frage + Mit Java zugreifen Netzwerkprogrammierung 9
S Socket-Frage zu einem LAN-Spiel. Netzwerkprogrammierung 3
Helgon Socket Socket IP Frage + Tutorial/Bücher Netzwerkprogrammierung 5
C Webservice Frage Netzwerkprogrammierung 2
M RMI Code Frage: Netzwerkprogrammierung 4
C Frage zur Klasse DatagramPacket Netzwerkprogrammierung 2
S Einfache Server Frage Netzwerkprogrammierung 5
xDarkSunx Kleine Frage authentifizierung Netzwerkprogrammierung 13
G Frage zu Servlets und deren Objekte + Bilder in Servlets anzeigen? Netzwerkprogrammierung 11
H Input-/OutputStream Frage Netzwerkprogrammierung 6
N Frage zu JNDI Netzwerkprogrammierung 2
B Frage zu einer Lösung (RMI) Netzwerkprogrammierung 2
G Netzwerk IP Frage Netzwerkprogrammierung 4
S NanoHTTPD Server frage Netzwerkprogrammierung 5
E einfache Frage: wie Fehler untersuchen mit Tomcat Netzwerkprogrammierung 5
E Einfache Frage zu servlets und netbeans 6.5 Netzwerkprogrammierung 41
N Frage/Problem mit RMI Netzwerkprogrammierung 3
Kr0e Frage zu SO_TIMEOUT Netzwerkprogrammierung 3
K SCP und die Frage: Wie geh ich damit um? Netzwerkprogrammierung 7
K Frage zum Verhalten von SocketChannel.write(.) Netzwerkprogrammierung 9
A Frage zur Verschlüsselung mit CipherInputStream Netzwerkprogrammierung 7
H Frage zu RMI Netzwerkprogrammierung 4
5 Grundlegende Design-Frage zu Webservices Netzwerkprogrammierung 16
C Frage zur ipcam WVC54GC von linksys ? Netzwerkprogrammierung 1
ven000m Mittlere Wartezeit Frage Netzwerkprogrammierung 5
T Frage bei Irc Verbindung Netzwerkprogrammierung 10
ven000m Frage aus einer mündl. Prüfung - wer kennt die Antwort? Netzwerkprogrammierung 6
S Serveranfrage - allgemeine Frage Netzwerkprogrammierung 2
ven000m Thread Frage Netzwerkprogrammierung 11
D Frage: Buffered Reader --> Wie komm ich an die Daten (Byt Netzwerkprogrammierung 3
H Frage zur Performance Netzwerkprogrammierung 10
flashfactor Frage zu HTML-Response Netzwerkprogrammierung 4
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
K Frage zu Net Send Netzwerkprogrammierung 7
G Frage zu JNDI / RMI Netzwerkprogrammierung 4
M generelle Frage zum Versenden Netzwerkprogrammierung 4
L Frage nach Socket Netzwerkprogrammierung 4
E frage zu streams Netzwerkprogrammierung 2
Luma Verschiedene Frage zu nem Netzwerkprog Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben