1 つのリモート サーバーに接続された 2 つのソケット クライアントを相互接続しようとしています。ケースは次のとおりです。
- Client_1] サーバーに接続
- Client_2] サーバーに接続
- Server] Client_1 と Client_2 の間にトンネルを作成します
- Client_1] 「何か」を書く
- Client_2] (いくつかのメッセージを待っている) Client_1 によって「何か」を受け取る
およびその逆。
それが私のコードです:
package jtestsock;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;
/**
*
* @author massimodeluisa
*/
public class Server extends Thread{
private List<Socket> clients;
private ServerSocket server;
private int port = 5001;
private BufferedReader input;
private PrintWriter output;
public Server() {
try {
server = new ServerSocket(port);
} catch (IOException e) {
System.out.println("Impossibile istanziare il server: "+e.getMessage());
}
}
@Override
public void run() {
System.out.println("Waiting for client message...");
//
// The server do a loop here to accept all connection initiated by the
// client application.
//
while (true) {
try {
Socket socket = server.accept();
System.out.println("Connection Received!");
clients.add(socket);
/* read response */
input = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
output = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())));
if(clients.size()>0){
Socket first = new Socket();
Socket second = new Socket();
first = clients.get(1);
second= clients.get(2); // || second = socket;
// ??? Tunneling input and output between two clients
}
} catch (IOException e) {
System.out.println("Client connection error: "+e.getMessage());
}
}
}
}
誰でも私を助けてもらえますか?ありがとう :)
アップデート:
2 つのクライアント間でポイント ツー ポイント接続を確立し、プロキシ サーバーのように自分のサーバーに渡したいと考えています...
サーバーは 2 つ以上の接続を受け入れる必要があり、一方のクライアントから他方のクライアントにメッセージをリダイレクトする書き込みと読み取りのためにサーバー上に 2 つのスレッドを作成すると、CPU が飽和状態になります。
(Ps. 私の英語で申し訳ありません XD)