Im creating a simple client server program in java.
What I want to do is iterate variable so I can shorten my code. Here it is.
Socket b1 = ss.accept();
Socket b2 = ss.accept();
Socket b3 = ss.accept();
if(b1.isConnected()){
System.out.println("Player from " + (b1.getLocalAddress().toString().substring(1) + ":" + b1.getLocalPort() + " has joined."));
}
DataOutputStream b1o = new DataOutputStream(b1.getOutputStream());
BufferedReader b1i = new BufferedReader( new InputStreamReader (b1.getInputStream()));
if(b2.isConnected()){
System.out.println("Player from " + (b2.getLocalAddress().toString().substring(1) + ":" + b2.getLocalPort() + " has joined."));
}
DataOutputStream b2o = new DataOutputStream(b2.getOutputStream());
BufferedReader b2i = new BufferedReader( new InputStreamReader (b.getInputStream()));
if(b3.isConnected()){
System.out.println("Player from " + (b3.getLocalAddress().toString().substring(1) + ":" + b3.getLocalPort() + " has joined."));
}
DataOutputStream b3o = new DataOutputStream(b3.getOutputStream());
BufferedReader b3i = new BufferedReader( new InputStreamReader (b3.getInputStream()));
Is there any way to loop variable name so it goes b1 at first loop, then b2, so on. Thanks in advance.
As MadProgrammer said, it is best to start a new thread on every connection, as ss.accept()
blocks. You can try something like this:
Socket b;
ServerSocket ss;
ClientConnection newClient;
Thread newThread;
while(true) {
try {
b = ss.accept();
System.out.println("Player from " + (b.getLocalAddress().toString().substring(1) + ":" + b.getLocalPort() + " has joined."));
newClient = new ClientConnection(b);
newThread = new Thread(newClient);
newThread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
class ClientConnection implements Runnable {
//each connection should have its own socket and streams
private Socket socket;
private ObjectOutputStream outputStream;
private ObjectInputStream inputStream;
public ClientConnection(Socket socket) {
this.socket = socket;
this.outputStream = new ObjectOutputStream(socket.getOutputStream());
this.inputStream = new ObjectInputStream(socket.getInputStream());
}
@Override
public void run() {
//do stuff with connection you have
}
}
I would also recommend keeping an array of your connections so you don't lose them.