Ich habe eine Server-Klasse, die einen Client an einem bestimmten Server-Socket-Port verbindet und einen Thread mit einer Serviceklasse startet. Konkret habe ich 3 Serviceklassen, also möchte ich 3 verschiedene Ports haben. Dies funktioniert jedoch nicht so, wie ich es erwartet hatte. Dies ist mein Code für den Server:Client/Server-Modell Java
import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
public class WebsiteServer {
public static void main(String args[]) throws IOException {
ServerSocket serversocket = new ServerSocket(22401);
ServerSocket serversocket2 = new ServerSocket(22402);
Thread thread;
Thread thread2;
Socket socket;
Socket socket2;
NewUserService newuserservice;
ExistingUserService existinguserservice;
System.out.println("Waiting for clients to connect.");
while (true) {
socket = serversocket.accept();
socket2 = serversocket2.accept();
if(socket.isConnected()) {
System.out.println("NewUserClient has connected.");
newuserservice = new NewUserService(socket);
thread = new Thread(newuserservice);
thread.start();
}
if(socket2.isConnected()) {
System.out.println("ExistingUserClient has connected.");
existinguserservice = new ExistingUserService(socket2);
thread2 = new Thread(existinguserservice);
thread2.start();
}
}
}
}
Es funktioniert gut, wenn ich nur einen Port verwenden, zB:
import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
public class WebsiteServer {
public static void main(String args[]) throws IOException {
ServerSocket serversocket = new ServerSocket(22401);
ServerSocket serversocket2 = new ServerSocket(22402);
Thread thread;
Thread thread2;
Socket socket;
Socket socket2;
NewUserService newuserservice;
ExistingUserService existinguserservice;
System.out.println("Waiting for clients to connect.");
while (true) {
socket = serversocket.accept();
//socket2 = serversocket2.accept();
if(socket.isConnected()) {
System.out.println("NewUserClient has connected.");
newuserservice = new NewUserService(socket);
thread = new Thread(newuserservice);
thread.start();
}
// if(socket2.isConnected()) {
//
// System.out.println("ExistingUserClient has connected.");
// existinguserservice = new ExistingUserService(socket2);
// thread2 = new Thread(existinguserservice);
// thread2.start();
// }
}
}
}
Jede mögliche Hilfe würde geschätzt.
Wenn Sie in einer Situation wie dieser landen, sollten Sie Debug-Zeilen einfügen, 'System.out.println (" hi ");' Wenn Sie das "hi" nicht sehen, wissen Sie, dass ein Problem vorliegt! –
Danke! Das würde helfen :) Ich bekomme das accept() jetzt blocken, aber wie kann ich dann auf nur 1 Port drei verschiedene Dienste anbieten? – Dan
Ich bin mir nicht sicher, was du meinst. Diese Anwendung bedient zwei Ports, 22401 und 22402. Wie von sethcall vorgeschlagen, sollten Sie einen Thread pro ServerSocket-Instanz verwenden. Ich werde es in einer Antwort erklären. –