2人でサーバーに接続しようとしていますが、サーバーは2人の間に接続を設定します。その後、彼らはお互いに話すことができます。「HEREEEEEEEEEEEEEEEEEE」というコメントを見ると、thread.sleepがあり、なんらかの理由でthread.sleep()で動作しますが、取り出した場合、パートナーに送信できるのは1人だけです。 thread.sleep();ではありません。
PSそれはSystem.out.println
thread.sleepだけでなく、それでも動作します
これに対応するファイルは他にもたくさんありますが、それらをロードするのは面倒であり、これが人々が知っている一般的な問題であることを望んでいました。
どんな助けでも大歓迎です。
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
public class ConnectedClient extends Thread
{
private Socket cSocket; //Client's Socket
private PrintWriter cout; //write to Client
private BufferedReader cin; //Read from Client
private String cip; //Clients IP
private Socket pSocket; //Partner's Socket
private PrintWriter pout; //Write to partner
private String pip; //Partner's ip
private Server srvr; //Current server
public ConnectedClient(Socket skt, Server s)
{
try
{
//Client information
cSocket = skt;
cout = new PrintWriter(cSocket.getOutputStream(), true);
cin = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
//Partner's information
pSocket = null;
pip = null;
pout = null;
//Server and thread
srvr = s;
start();
}
catch(Exception E)
{
System.out.println(E);
}
}
public void run()
{
String data;
System.out.println("Connected to client");
try
{
//Get the ip address and add it to server's table
while(!cin.ready()){}
cip = cin.readLine();
srvr.addToIpTable(cip, cSocket);
////Waiting for another client//
while(pSocket == null) {Thread.sleep(10);} // HEREEEEEEEEEEEEEEEEEEEEE
System.out.println("Found a partner");
pout = new PrintWriter(pSocket.getOutputStream(), true);
System.out.println("I am here");
cout.println("Done");
while(true)
{
//Waits for a message
while(!cin.ready()){}
data = cin.readLine();
//Outputs message to partner
pout.println(data);
pout.flush();
//End when exit is typed
if(data.equals("exit"))
break;
}
//Cleanup
cSocket.close();
pSocket.close();
cout.close();
cin.close();
}
catch(Exception E)
{
System.out.println(E);
}
}
public String getCip()
{
return cip;
}
public Socket getCSocket()
{
return cSocket;
}
public void setPartner(String partnerIp, Socket socket)
{
pip = partnerIp;
pSocket = socket;
}
}