1
私は初心者のJavaネットワークプログラミングですので、心に留めておいてください。サーバクライアントコミュニケーションフリーズ[コマンドプロンプト]
私はマルチスレッドのJavaサーバークライアントアプリケーションを開発しようとしています。初心者のために、私は単一のクライアントとサーバーの間の通信チャネルを開発することを目指しています。スレッドを使わないと、単一のクライアント/サーバー間の通信は正常に動作します。私がスレッドを適用すると、プログラムが失敗します。メッセージは送信されていません。
MyServer.java
class MyServer {
public static void main(String[] args) {
try {
ServerSocket svc = new ServerSocket(4567);
System.out.println("Server Waiting at Port 4567");
do {
Socket sock = svc.accept();
MyServerThread thread = new MyServerThread(sock);
}while(true);
}
catch(UnknownHostException ex) {
System.out.println("Unknown Host");
}
catch(IOException ex) {
System.out.println("IO Exception");
}
}
}
MyServerThread.java
class MyServerThread extends Thread{
Socket sock;
public MyServerThread(Socket sock) {
this.sock = sock;
}
public void run() {
try {
PrintWriter pw = new PrintWriter(sock.getOutputStream());
Scanner cd = new Scanner(sock.getInputStream());
Scanner kb = new Scanner(System.in);
do {
String clientstr = cd.nextLine();
System.out.println("Client: "+clientstr);
if(clientstr.equalsIgnoreCase("quit")) {
break;
}
String str = kb.nextLine();
pw.println(str);
pw.flush();
}while(true);
sock.close();
pw.close();
}
catch(UnknownHostException ex) {
System.out.println("Unknown Host");
}
catch(IOException ex) {
System.out.println("IO Exception");
}
}
}
MyClientという
class MyClient3 {
public static void main(String[] args) {
try {
InetAddress object = InetAddress.getByName("192.168.18.125");
Socket sock = new Socket(object, 4567);
PrintWriter pw = new PrintWriter(sock.getOutputStream());
Scanner cd = new Scanner(sock.getInputStream());
Scanner kb = new Scanner(System.in);
do {
String str = kb.nextLine();
pw.println(str);
pw.flush();
String strserver = cd.nextLine();
System.out.println("Server: "+strserver);
if(strserver.equalsIgnoreCase("quit")) {
break;
}
}while(true);
sock.close();
pw.close();
}
catch(UnknownHostException ex) {
System.out.println("Unknown Host");
}
catch(IOException ex) {
System.out.println("IO Exception");
}
}
}
マルチスレッドのクライアントサーバープログラムを作成するときは、このコードは正しくありません。複数のクライアントがサーバーに接続する場合は、IDを割り当てなければなりません。 1,2,3,4などを各クライアントに提供しています。詳細はこちら[link](http://mrbool.com/creating-a-multithreaded-chat-with-socket-in-java/34275) –