Недавно я пытался установить соединение между сервером и клиентом. Я смог установить соединение 1 на 1 без проблем, но сейчас я пытаюсь создать сервер, который принимает несколько клиентов, и у меня возникает проблема, когда я не могу заставить сервер прослушивать соединения, пока есть один установил ... Я не уверен, что я ясно дал понять, но вот мой код:
-Основной цикл, ожидающий соединения:
public class ChatMultiServer {
public static void main(String []args){
int socknum = 124;
ServerSocket serverSocket;
Socket clientSocket;
while(true){
////opens socket
try{
System.out.println("Opening port...");
new ServerSocket(124).close();
serverSocket = new ServerSocket(socknum);
}catch(Exception e){System.out.println("Error 101 = failed to bind to port "+socknum+"."); break;}
//////accepts connection
try{
System.out.println("Waiting for connections...");
clientSocket = serverSocket.accept();
}catch(Exception e){System.out.println("Error 102 = failed to accept port "+socknum+"."); break;}
/////
try{
System.out.println("Initializing thread...");
new Thread(new CMSThread(clientSocket));
}catch(Exception e){System.out.println("Error 103 = failed to create thread."); break;}
try{
serverSocket.close();
}catch(Exception e){System.out.println("Error 105 = failed to close socket.");}
}
}
}
-Нить, которая обрабатывает соединения:
public class CMSThread extends Thread{
Socket socket;
BufferedReader in;
PrintWriter out;
String username;
char EOF = (char)0x00;
public CMSThread(Socket s){
socket = s;
run();
}
public void run(){
try{
System.out.println("Setting up streams...");
in = (new BufferedReader(new InputStreamReader(socket.getInputStream())));
out = new PrintWriter(socket.getOutputStream());
}catch(Exception e){System.out.println("Error 204 = failed to get streams");}
try{
out.print("Welcome! you can quit at any tyme by writing EXIT.\nLet me introduce myself, I'm 'testprogram 1', but that doesn't really matter since you'll do the talking.\nWhat's your name?"+EOF);
out.flush();
username = in.readLine();
out.print("<b>"+username+"</b>, that's a nice name.\nWell, i'll shut up now. Have fun talking to yourself while whoever is running the server observes your conversation.\n"+EOF);
out.flush();
}catch(Exception e){System.out.println("Are you effin kidding me!? -.- whatever... Error 666 = failed to chat.");}
}
}
Моя проблема, опять же, заключается в том, что, когда сервер получает соединение с клиентом (я использую ActionScript для клиентов только потому, что сделать GUI проще), он просто ждет, пока поток завершит свою работу, чтобы запустить петля снова. Я пытаюсь сделать его зацикленным в то время, когда поток обрабатывает чат.
Я подумал, что, может быть, мне нужно создать поток для цикла, а также поток для обработки соединения, но я не уверен относительно того, как мне это сделать ... Пожалуйста, дайте мне знать, если мой Гипотеза была несколько верной, и если бы она была правильной, было бы неплохо дать какое-то указание на ответ.
PS: извините, если мой код немного запутан или это глупый вопрос, я давно не создавал java-программы ...