2017-08-19 9 views
0

Ich schreibe ein Server-Client-Programm. Es ist wie ein einfacher Konsolen-Chat-Raum. Ich benutze Server-Thread, um mehrere Clients zu behandeln. Es funktioniert gut, wenn ich die Scanner in den Client-Konstruktor setzen. (Dieser Teil ist kommentiert) Aber ich möchte den Scanner Teil verschieben, der die Eingabe vom Benutzer an die main anfordert. Ich habe socket close error. Ich weiß nicht, was das Problem ist. Wie kann ich die send Funktion verwenden, um Daten in main zu senden?So senden Sie Daten an den Server außerhalb der Clientklasse

Auftraggeber:

public class GameClient { 
private Socket socket; 
private String serverIP; 
private OutputStreamWriter writer; 
private BufferedReader reader; 

public GameClient(String host){ 
    this.serverIP = host; 

    try{ 
     //Connect to server 
     socket = new Socket(InetAddress.getByName(serverIP), 1234); 
     writer = new OutputStreamWriter(this.socket.getOutputStream(), "UTF-8"); 
     reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream(), "UTF-8")); 
     //Start a new thread for reading from server 
     new Thread(new GameClientReader(socket)).start(); 

     Scanner scanner = new Scanner(System.in); 
     System.out.println("Write something: "); 
     String str = ""; 
//   while((str = scanner.nextLine()) != null){ 
//    writer.write(str); 
//    writer.write('\n'); 
//    writer.flush(); 
//    System.out.println("Write something: "); 
//   } 

    }catch(IOException e){ 
     System.out.println("Client failed to connect!"); 
     e.printStackTrace(); 
    }finally{ 
     try { 
      socket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 


public void send(JSONObject json){ 
    try{ 
     String message = json.toJSONString(); 
     writer.write(message); 
     writer.write('\n'); 
     writer.flush(); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 

public void send(String msg){ 
    try { 
     writer.write(msg); 
     writer.flush(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String args[]){ 
    GameClient client = new GameClient("127.0.0.1"); 

    Scanner scanner = new Scanner(System.in); 
    System.out.println("Write something: "); 
    String str = ""; 
    while((str = scanner.nextLine()) != null){ 
     client.send(str); 
     System.out.println("Write something: "); 
    } 

} 
} 
+0

verwendet Es als ‚Steckdose in der Nähe Fehler‘ kein solcher Fehler ist . Deine Frage hat nichts mit deinem Titel zu tun. Unklar, was du verlangst. – EJP

Antwort

0

Sie Socket in finally Block GameClient Konstruktor zu schließen, und rufen Sie dann Methode send die writer.write(msg); aufruft, die Instanz von Socket

Verwandte Themen