大家好我正在尝试通过服务器连接两个客户端,atm每个客户端c连接到服务器并创建一个新线程,以便每个客户端可以与服务器通信,但我如何让两个客户端通过服务器进行通信?
服务器:
public void allowConnections(){
int i = 0;
try{
while(true){
new Thread(new TestT(draughtsSS.accept(),i )).start(); //listen for incoming connections
i++;
}
}
catch(IOException e){
System.out.println("Error :"+e.getMessage());
}
}
class TestT implements Runnable{
Socket s;
int gameNo;
Scanner in;
ObjectInputStream objectIn; // for retrieving new color array (down s socket)
ObjectOutputStream out;
PrintWriter outPW;
//String Player1;
//String Player2;
String playerIP;
String opponentIP;
int port = 50000;
TestT(Socket s, int gameNo){
this.s = s;
this.gameNo = gameNo;
}
public void run(){
try{
outPW = new PrintWriter(s.getOutputStream(), true);
out = new ObjectOutputStream(s.getOutputStream());
out.writeObject(list);
in = new Scanner(s.getInputStream());
outPW.println("returnIP"); ///get the IP of the client
clientIPArray.add(in.nextLine()); /// add it to the clientIPArray
}
catch(IOException e){
e.getStackTrace();
}
JOptionPane.showMessageDialog(new JFrame(), s.getInetAddress().toString() +" has connected.");
list[gameNo] = "Game "+Integer.toString(gameNo);
gamesList.updateUI();
}
}
}
private void setupConnection(String serverIP, String port){
int portInt = Integer.parseInt(port);
serverIp = serverIP;
try{
IP = InetAddress.getByName(serverIP);
clientSocket = new Socket(IP,portInt);
JOptionPane.showMessageDialog(new JFrame(), "Successfully connected to Server");
in = new ObjectInputStream(clientSocket.getInputStream());
out = new PrintWriter(clientSocket.getOutputStream(), true);
scanIn = new Scanner(clientSocket.getInputStream());
a = (String[]) in.readObject();
if(scanIn.nextLine().equals("returnIP"))out.println(clientIp);
getGamesList(a);
Thread tss = new Thread(new ClientThread());
tss.start();
System.out.println("w");
}
catch(Exception e){
System.out.println("ErrorC :" +e.getMessage());
}
}
答案 0 :(得分:0)
建议:
在服务器端保留几个缓冲区,在客户端输入时刷新它们,并在连接另一个客户端时发送数据
让服务器等待,直到连接两个客户端,然后将每个InputStream
的{{1}}重定向到另一个Socket
。
让服务器等到两个客户端连接,然后传输给另一个客户端地址,让他们通信p2p(不带服务器)
上述
最好的方法取决于你的目标。