まず第一に、UDPは非常に信頼性があります(実際、IPプロトコル自体と同じくらい信頼性があります)。TCPは、バックエンドで非常に多くの魔法を伴うデータが受信されたことを確認するだけです。他のマシンがメッセージを受信したことを絶対に確認する必要がない限り、UDPを使用してそれを行うことができます。「TCPを使用しないでください」と言っているのではないことに注意してください。UDPも考慮に入れる必要があることを明確にしたいと思います。
とにかく、はい、あなたは簡単なリスニングプログラムを作成することができます。これは、サーバーからメッセージを読み取るJavaのクライアントの例です。Threadクラスのrunメソッドをオーバーライドします。
public void run() {
try {
String messageFromServer = reader.readLine();
while (messageFromServer != null) {
// Do things with messageFromServer here
// processor.processFromServer(messageFromServer);
messageFromServer = reader.readLine(); // Blocks the loop, waits for message
}
}
catch (IOException e) {
// Handle your exception
}
}
とりわけ、私のスレッドは次のように設定されました。
public CommunicationThread(String hostname, int port, int timeout) throws IOException, SocketTimeoutException {
InetSocketAddress address = new InetSocketAddress(hostname, port);
socket = new Socket();
socket.connect(address, 2000); // 2000ms time out
// You can use the writer to write messages back out to the server
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
ここで、サーバー側に関して、次のように実行できます。
- クライアントがあなたの住所を知っている場合に、クライアントが連絡できるようにするプログラムを作成します。
- 接続を受け入れ、ソケットをリストに保存します。
- メッセージを送信する必要がある場合は、リストをトラバースして、リストの全員にデータを送信します。
あなたはあなたのサーバーで聞き始めることができます
this.socket = new ServerSocket(port);
他の人にサービスを提供しながらクライアントを受け入れることができるように、スレッド化することもできます(またはすべきです(?))。次の方法で新しいクライアントを受け入れることができます。
socket.accept(); // Blocks, waiting for someone to connect, returns open socket
これを、BufferedWriter(および、クライアントからも読み取りたい場合はBufferedReader)を処理できるまったく新しいクラスに自由に渡してください。そのクラスは、writeToClient(message)などを実装する場所です。writeToClient(String s)メソッドと(サーバーサーバー、ソケットソケット)を持ち、ArrayListconListを初期化したClientConnectionクラスがある状況を考えてみます。従う方法は次のとおりです。サーバーの別のスレッドで、
ClientConnection con = new ClientConnection(this, socket.accept());
conList.add(con);
次に、クライアントに書き込みたい場合:
for (ClientConnection c : conList) {
c.writeToClient("I'm sending you a message!");
}
私はあなたがあなたが何をする必要があるかについて漠然とした考えを得ることを望みます。Socketのドキュメントを読んでください。とても便利です。また、スレッド化されたアプリケーションの場合と同様に、リストをトラバースしているときにリストを変更するなどのことを行わないようにし、競合状態を回避してください。
幸運を!