私はチャットサーバーを作成しています。ソケットサーバーとスレッドを使用しています。私は、サーバーChatServer.java、ThreadedServer.java、およびMain.javaに3つのクラスを持っています。 My Clientには2つのChatClient.java、Main.javaがあります。メッセージをクライアントからサーバーに送信するときに、サーバーがすべてのクライアントにメッセージを送信するようにする必要があります。Java - すべてのクライアントにメッセージを送信
ChatServer.java
package server;
import java.io.*;
import java.net.*;
public class ChatServer {
protected Socket s;
protected Socket ss;
public ChatServer() {
try {
ServerSocket ss=new ServerSocket(6969);
Runtime.getRuntime().addShutdownHook(new Thread() {
public void main(String []args) throws IOException {
ss.close();
}
});
while (true) {
Socket s =ss.accept();
new ThreadedServer(s).start();
}
}catch(Exception e) {
System.out.println(e);
}
new ThreadedServer(s).start();
}
}
ThreadedServer.java
package server;
import java.io.*;
import java.net.*;
public class ThreadedServer extends Thread{
protected Socket socket;
public ThreadedServer(Socket clientSocket) {
this.socket = clientSocket;
}
public void run() {
try {
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
while (true) {
String str=(String)dis.readUTF();
String remote = socket.getInetAddress().toString();
String newmes = remote + ": " + str;
dos.writeUTF(newmes);
System.out.println(newmes);
if (str.toUpperCase() == "QUIT") {
socket.close();
break;
}else if (str.toUpperCase() == "EXIT") {
socket.close();
break;
}
}
}catch(Exception e) {
System.out.println(e);
}
}
}
Main.java(サーバー) パッケージサーバ。ここで
public class Main {
public static void main(String[] args) {
ChatServer chat = new ChatServer();
}
}
はClient.javaの
ChatClient.java パッケージクライアントです。
import java.io.*;
import java.net.*;
public class ChatClient {
public ChatClient() {
try {
Socket s = new Socket("10.4.27.29",6969);
Runtime.getRuntime().addShutdownHook(new Thread() {
public void main(String []args) throws IOException {
s.close();
}
});
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
DataInputStream dis = new DataInputStream(s.getInputStream());
while (true) {
String message = System.console().readLine();
dos.writeUTF(message);
System.out.println(dis.readUTF());
}
}catch(Exception e) {
System.out.println(e);
}
}
}
Main.java(クライアント)
package client;
public class Main {
public static void main(String[] args) {
ChatClient chat = new ChatClient();
}
}
してくださいすべてのヘルプは素晴らしいだろう。
また、これをより良くするための任意のアイデアは高く評価されます。ありがとう!!
"これはよりよいづくり" について。ノンブロッキングソケットIOの使用を検討してください。すべてのクライアントにメッセージを送信することについて:あなたのサーバーにソケットのセットを保存し、接続されている各ソケットにメッセージを送信します。 – petul