特定のサーバーソケットポート上のクライアントを接続し、サービスクラスを持つスレッドを開始するサーバークラスがあります。具体的には、私は3つのサービスクラスを持っていますので、3つの異なるポートを持ちたいと思います。しかし、これは私が期待していたように機能していません。これは、サーバーのための私のコードです:クライアント/サーバーモデル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();
}
}
}
}
私は例えば一つのポートを使用する場合、それは正常に動作します:
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();
// }
}
}
}
任意の助けをいただければ幸いです。
このような状況になった場合は、デバッグ行 'System.out.println(" hi ");'を表示する必要があります。 "hi"が表示されていない場合は、問題があります。 –
ありがとう!それは役に立ちます:)今はaccept()ブロックを手に入れましたが、3つの異なるサービスを唯一のポートで提供するにはどうしたらいいですか? – Dan
あなたは何を意味するのか分かりません。このアプリケーションは、2つのポート(22401と22402)にサービスを提供します。sethcallの推奨によると、ServerSocketインスタンスごとに1つのスレッドを使用する必要があります。私は答えで説明します。 –