2017-07-23 2 views
-1

J'ai un problème vraiment étrange, si j'envoie un message du serveur/client au serveur/client, ils ne seront pas envoyés dans la console. J'ai essayé toute la journée pour réparer et googlé avant de réparer, mais je ne trouve pas de réponse à mon problème, c'est pourquoi je le demande ici.Java Socket erreur avec l'envoi et la réception

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

Je suppose que vous n'obtenez pas d'erreur de compilation? Alors est-ce une erreur d'exécution (exception)? Des résultats inattendus? Et si vous avez plusieurs fichiers que vous montrez dans la question, s'il vous plaît essayez de les séparer avec du texte non-code (comme leur nom de fichier). Si vous ne l'avez pas encore fait, prenez le temps de [lire comment poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask). Vous devriez probablement aussi lire [Comment déboguer de petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) par Eric Lippert. –

+2

La première chose que vous faites sur le serveur est d'attendre que le client envoie une ligne de texte. La première chose que vous dites sur le client est d'attendre que le serveur envoie une ligne de texte. Vous avez mis en place un blocage. –

Répondre

0

Les deux extrémités commencent par recevoir du socket. Vous êtes dans l'impasse. Reconsidérer le protocole de votre application