2016-05-05 15 views
0

Ich arbeite an einem kleinen Spiel, das Standortdaten zwischen einem Client und einem Server sendet, um zu erfahren, wie Sockets funktionieren.Senden und Empfangen von Daten gleichzeitig über Sockets

Der Server kann Daten senden und empfangen, kein Problem, und der Client kann Daten senden, aber wenn der Client versucht, Daten vom Server einzulesen, hängt das Programm. (Dieser Teil wird auf Kommentar)

Server-Code:

public void run() { 

    try { 
     serverSocket = new ServerSocket(10007); 
    } catch (IOException e) { 
     System.err.println("Could not listen on port: 10007."); 
     System.exit(1); 
    } 

    try { 
     System.out.println("Waiting for connection..."); 
     clientSocket = serverSocket.accept(); 
    } catch (IOException e) { 
     System.err.println("Accept failed."); 
     System.exit(1); 
    } 
    System.out.println("Connection successful"); 
    System.out.println("Waiting for input....."); 
    while (true) { 
     try { 
      in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
      out = new PrintWriter(clientSocket.getOutputStream(), true); 
      if (in.readLine() != "0" && in.readLine() != null) { 
       setXY(in.readLine()); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 

     } 
     out.println("X" + Graphics.charX); 
     out.println("Y" + Graphics.charY); 
    } 

Client-Code:

public void run() { 

    try { 
     System.out.println("Attemping to connect to host " + serverHostname + " on port " + serverPort + "."); 
     echoSocket = new Socket(serverHostname, serverPort); 
    } catch (UnknownHostException e) { 
     System.err.println("Don't know about host: " + serverHostname); 
     System.exit(1); 
    } catch (IOException e) { 
     System.err.println("Couldn't get I/O for " + "the connection to: " + serverHostname); 
     System.exit(1); 
    } 
    while (true) { 

     try { 
      in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); 
      out = new PrintWriter(echoSocket.getOutputStream(), true); 
      /*if (in.readLine() != "0" && in.readLine() != null) { 
       setXY(in.readLine()); 
      }*/ 
     } catch (IOException e2) { 
      e2.printStackTrace(); 
     } 
     out.println("X" + Graphics.charX); 
     out.println("Y" + Graphics.charY); 

    } 

} 

Jede Hilfe ist sehr zu schätzen!

+0

Machst du hier Threading? –

+0

Ja, diese Klasse ist ein Thread. –

+0

Nun, Sie threading nicht richtig, überhaupt nicht, und Sie werden sehen, wie dies mit Threads zu tun. Diese Art von Frage wurde schon oft gestellt, also suche ein wenig - es wird sich für dich lohnen, wenn du es tust. –

Antwort

0

Sie benötigen zwei Threads, um blockierende Sockets gleichzeitig zu lesen/schreiben (was Sie gerade versuchen). Wenn Sie in.readLine() aufrufen, wird der aktuelle Thread blockiert, bis er eine Datenzeile empfängt.

Verwandte Themen