興味深い質問があります。クライアントプロセスがサーバーとクライアントの両方として機能することを意味するピアツーピア接続を確立しようとしています。理想的には、クライアント ソケット (Socket クラス) とサーバー ソケット (Server Socket クラス) を持つ必要があります。今、私はこの概念を使用しようとしましたが、うまくいきません。それを見てください:
public static void main(String argv[]) throws Exception
{
Socket clientSocket = null;
BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
System.out.println("Enter the server port u want to be assigned to this peer:");
sentence = inFromUser.readLine();
System.out.println("writing current port to client = "+ sentence);
outToServer.writeBytes("p~"+sentence + "\n" );
int serverport = Integer.parseInt(sentence);
ServerSocket server = new ServerSocket(serverport);
Socket client;
//client
System.out.println("enter port no of the server port of an other peer:");
int msg=Integer.parseInt(inFromUser.readLine());
clientSocket = new Socket("localhost", msg);
outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeBytes("hi");
while(true)
{
//server port listens infinitely and spawns new thread
System.out.println("inside true");
client = server.accept();
Thread serverThread = new Thread(new acceptconnection1(client));
serverThread.start();
}}}
class acceptconnection1 implements Runnable {
BufferedReader inFromClient, inn;
DataOutputStream ds;
Socket socket;
int peersocket;
String clientSentence;
int serverport ;
Socket clientSocket = null;
acceptconnection1 (Socket socket,) throws IOException{
this.socket = socket;
inn = new BufferedReader (new InputStreamReader(System.in));
inFromClient =new BufferedReader(new InputStreamReader(socket.getInputStream()));
ds = new DataOutputStream(socket.getOutputStream());
}
@Override
public void run () {
String cs,a;
try {
System.out.println("waiting for connection ");
if(( clientSentence = inFromClient.readLine())!=null)
{
System.out.println("Message from other peer" + clientSentence);
}
} catch (IOException ex) {
Logger.getLogger(acceptconnection1.class.getName()).log(Level.SEVERE, null, ex);
}}}
出力: 2 つのクライアント プロセスを作成すると、
o/p of client1: このピアに割り当てたいサーバーポートを入力してください: 1111 現在のポートをクライアントに書き込んでいます = 1111 hi 接続先のポート番号を入力してください: 2222 inside true inside true 接続を待っています
このピアに割り当てたいサーバーポートを入力してください: 2222 クライアントへの現在のポートの書き込み = 2222 hi 接続先のポート番号を入力してください: 1111 内部 true 内部 true 接続を待機中
何が起こるかは、両方が接続を待つことです。どうすればこれを解決できますか?