2016-03-04 2 views
0

Я пытаюсь подключить всех своих клиентов к одному серверу. Я провел некоторое исследование и выяснил, что самый простой способ сделать это - создать новый поток для каждого клиента, который подключается к серверу. Но я уже застрял в той части, где клиент отключается и снова подключается.Подключить несколько клиентов к одному серверу

Client

import java.io.IOException; 
import java.io.PrintStream; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import java.util.Scanner; 

public class Test { 
    private static int port = 40021; 
    private static String ip = "localhost"; 

    public static void main(String[] args) throws UnknownHostException, 
      IOException { 
     String command, temp; 
     Scanner scanner = new Scanner(System.in); 
     Socket s = new Socket(ip, port); 
     while (true) { 
      Scanner scanneri = new Scanner(s.getInputStream()); 
      System.out.println("Enter any command"); 
      command = scanner.nextLine(); 
      PrintStream p = new PrintStream(s.getOutputStream()); 
      p.println(command); 
      temp = scanneri.nextLine(); 
      System.out.println(temp); 
     } 
    } 

} 

Сервер

import java.io.IOException; 
import java.io.PrintStream; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Scanner; 

public class MainClass { 

    public static void main(String args[]) throws IOException { 
     String command, temp; 
     ServerSocket s1 = new ServerSocket(40021); 
     while (true) { 
      Socket ss = s1.accept(); 
      Scanner sc = new Scanner(ss.getInputStream()); 
      while (sc.hasNextLine()) { 
       command = sc.nextLine(); 
       temp = command + " this is what you said."; 
       PrintStream p = new PrintStream(ss.getOutputStream()); 
       p.println(temp); 
      } 
     } 
    } 
} 

Когда я подключаю, когда он работает правильно, но как только я отключит клиента и попытаться восстановить (или подключить второй клиент) не дает ошибка или что-то, что просто не работает. Я стараюсь держать его как можно более простым.

Выход с одним клиентом: Correct output

Когда я пытаюсь подключить второй клиент: Output with 2 clients connected

Я надеюсь, что кто-то может помочь мне. Заранее спасибо.

+0

Таким образом, на основе ваших исследований вы должны были создать новый поток для каждого клиентское соединение на сервере. Где вы это делаете? – RealSkeptic

+0

@RealSkeptic Я уже несколько месяцев учился в колледже программирования, и я не разбираюсь в потоковом использовании. Поэтому я надеюсь, что кто-то сможет объяснить это мне. –

ответ

1

Ваш сервер в настоящее время обрабатывает только один клиент в то время, использование нитей для каждого клиента, Измените код сервера, как это: -

public static void main(String[] args) throws IOException 
{ 
    ServerSocket s1 = new ServerSocket(40021); 
    while (true) 
    { 
     ss = s1.accept(); 
     Thread t = new Thread() 
     { 
      public void run() 
      { 
       try 
       { 
        String command, temp; 
        Scanner sc = new Scanner(ss.getInputStream()); 
        while (sc.hasNextLine()) 
        { 
         command = sc.nextLine(); 
         temp = command + " this is what you said."; 
         PrintStream p = new PrintStream(ss.getOutputStream()); 
         p.println(temp); 
        } 
       } catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     t.start(); 
    } 
} 
+0

Да, но это не решает проблему. Это не дает исключения. –

+0

@JesseVlietveld, когда ваша основная функция выбрасывает IOException, программа выходит, когда клиент отключается, поскольку исключение выбрасывается из основной функции, которая отключает ваш сервер, вы можете удалить это и поместить попытку catch внутри в одиночку, или вы могли бы сохранить это там и поместите это внутри –

+0

Я не думаю, что вы меня понимаете. Проблема в том, что она не дает ошибки или исключения. Он просто ничего не показывает. Я уточню свой пост с более подробной информацией. –

Смежные вопросы