2017-07-23 4 views
-1

Ich habe ein wirklich seltsames Problem, wenn ich eine Nachricht vom Server/Client an Server/Client senden, werden sie nicht in der Konsole gesendet. Ich habe den ganzen Tag versucht, es zu reparieren und googelte es vor, wie man es repariert, aber ich kann keine Antwort für mein Problem finden, deshalb frage ich es hier.Java Socket Fehler beim Senden und Empfangen

My Code: 

Serversocket: 
package me.jackboyplay.sockets_server; 

import java.io.IOException; 
import java.net.ServerSocket; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

/** 
* 
* @author JackboyPlay 
*/ 
public class Server { 

    public static void main(String[] args) { 
     ServerSocket socket = null; 
     try { 
      socket = new ServerSocket(1243); 
      System.out.println("Gestartet..."); 
     } catch (IOException ex) { 
      Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     if(socket == null){ 
      System.out.println("NULL -> Aus"); 
      return; 
     } 
     while(true){ 
      try { 
       new Clients(socket.accept()).start(); 
      } catch (IOException ex) { 
       Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 

} 

    package me.jackboyplay.sockets_server; 

import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.PrintStream; 
import java.net.Socket; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

/** 
* 
* @author JackboyPlay 
*/ 
public class Clients extends Thread{ 

    Socket socket; 
    DataInputStream dis; 
    PrintStream dos; 

    public Clients(Socket socket){ 
     this.socket = socket; 
     try { 
      dis = new DataInputStream(socket.getInputStream()); 
      dos = new PrintStream(socket.getOutputStream()); 
     } catch (IOException ex) { 
      Logger.getLogger(Clients.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    @Override 
    public void run(){ 
     System.out.println("Thread started..."); 
     String receive = null; 
     while(true){ 
      try { 
       receive = dis.readLine(); 
      } catch (IOException ex) { 
       Logger.getLogger(Clients.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      if(receive != null){ 
       System.out.println(receive); 
       dos.println("Out"); 
       dos.flush(); 
      } 
     } 
    } 

} 
Client: 

    package me.jackboyplay.sockets_client; 

import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.util.Scanner; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

/** 
* 
* @author JackboyPlay 
*/ 
public class Client { 

    public static void main(String[] args) throws IOException { 
     Socket socket = null; 
     try { 
      socket = new Socket("localhost", 1243); 
     } catch (IOException ex) { 
      Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     if(socket == null){ 
      return; 
     } 
     DataInputStream dis = null; 
     PrintWriter dos = null; 
     try { 
      dis = new DataInputStream(socket.getInputStream()); 
      dos = new PrintWriter(socket.getOutputStream()); 
     } catch (IOException ex) { 
      Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     String receive = null; 
     while(true){ 
      Scanner s = new Scanner(System.in); 
      try { 
       receive = dis.readLine(); 
      } catch (IOException ex) { 
       Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      if(receive != null){ 
       dos.println("Hallo"); 
       dos.flush(); 
       try { 
        receive = dis.readLine(); 
       } catch (IOException ex) { 
        Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
       } 
       System.out.println(receive); 
      } 
     } 
    } 

} 
+1

Ich nehme an, Sie erhalten keinen Compiler-Fehler? Dann ist es ein Laufzeitfehler (Ausnahme)? Unerwartete Ergebnisse? Und wenn Sie mehrere Dateien haben, die Sie in der Frage zeigen, versuchen Sie bitte, sie mit etwas Nicht-Code-Text zu trennen (wie ihr Dateiname). Wenn Sie es noch nicht getan haben, nehmen Sie sich bitte etwas Zeit, um [gute Fragen zu stellen] (http://stackoverflow.com/help/how-to-ask). Sie sollten wahrscheinlich auch lesen [Wie kleine Programme zu debuggen] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) von Eric Lippert. –

+2

Das erste, was Sie auf dem Server tun, ist Warten zu lesen, bis der Client eine Textzeile sendet. Das erste, was Sie auf dem Client sagen, ist Warten zu lesen, bis der Server eine Textzeile sendet. Sie haben einen Deadlock implementiert. –

Antwort

0

Beide Enden beginnen mit dem Empfang von der Steckdose. Du bist festgefahren. Überdenken Sie Ihr Anwendungsprotokoll

Verwandte Themen