2014-09-21 2 views
0

Есть вопросы с той же проблемой, но они не помогают мне.гнездо не записывается на сервер

Ниже приведен код, в котором я работал, где ServerSocket не получил никакого сообщения от клиента Socket.

Сервер

package rescue_server; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.TreeMap; 

/** 
* 
* @author Mohammad Faisal 
*/ 
public class RServer { 

    private TreeMap<String, PrintWriter> clients; 
    private static final int PORT = 6621; 

    private class ClientHandler implements Runnable { 

     private PrintWriter writer; 
     private BufferedReader reader; 

     public ClientHandler(Socket client) { 
      try { 
       writer = new PrintWriter(client.getOutputStream()); 
       reader = new BufferedReader(new InputStreamReader(client.getInputStream())); 
      } catch (IOException ex) { 
       System.out.println(ex.getMessage()); 
      } 
     } 

     @Override 
     public void run() { 
      System.out.println("client handler thread started"); 
      String msg; 
      try { 
       while ((msg = reader.readLine()) != null) { 
        System.out.println(msg); 
       } 
      } catch (IOException ex) { 
       System.out.println(ex.getMessage()); 
      } 
     } 
    } 

    public RServer() { 
     clients = new TreeMap<>(); 
    } 

    public void start() { 
     try { 
      ServerSocket server = new ServerSocket(RServer.PORT); 
      while (true) { 
       System.out.println("waiting...."); 
       Socket client = server.accept(); 
       Thread tclient = new Thread(new ClientHandler(client)); 
       tclient.setDaemon(true); 
       tclient.start(); 
       System.out.println("got a connection."); 
      } 
     } catch (IOException ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 

    public static void main(String[] args) { 
     new RServer().start(); 
    } 
} 

Client

package rescue_client; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JFrame; 

/** 
* 
* @author Mohammad Faisal 
*/ 
public class RClient { 

    private final static int SERVER_PORT = 6621; 
    private final static String SERVER_IP = "127.0.0.1"; 
    private Socket socket; 
    private PrintWriter writer; 
    private BufferedReader reader; 

    private class ServerHandler implements Runnable { 

     @Override 
     public void run() { 
      System.out.println("server handler started."); 
      String msg; 
      try { 
       while ((msg = reader.readLine()) != null) { 
        System.out.println(msg); 
       } 
      } catch (IOException ex) { 
       System.out.println(ex.getMessage()); 
      } 
     } 
    } 

    public RClient() { 
     JFrame frame = new JFrame(SERVER_IP); 
     frame.setVisible(true); 
     frame.setBounds(10, 20, 100, 100); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    private void startServerHandler() { 
     Thread tserver = new Thread(new ServerHandler()); 
     tserver.setDaemon(true); 
     tserver.start(); 
     sendWelcomeMsg(); 
    } 

    private void sendWelcomeMsg() { 
     try { 
      writer.write(InetAddress.getLocalHost().getHostName()); 
      writer.flush(); 
     } catch (UnknownHostException ex) { 
      System.out.println(ex.getMessage()); 
     } 
     writer.flush(); 
    } 

    public void start() { 
     System.out.println("starting client..."); 
     try { 
      socket = new Socket(RClient.SERVER_IP, RClient.SERVER_PORT); 
      writer = new PrintWriter(socket.getOutputStream()); 
      reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

      startServerHandler(); 
     } catch (IOException ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 

    public static void main(String[] args) { 
     new RClient().start(); 
    } 
} 

Проблема заключается в том, что я не получаю сообщение об server от client.

+0

Возможно, вы не отправляете фактическую строку? Сервер ждет строки - нечто большее, чем несколько байтов. –

+0

@MartinJames: в клиенте 'sendWelcomeMsg()' Я пишу его на сервер –

+2

Добавьте строку перевода строки ('' \ n "') в отправляемую строку. – Fildor

ответ

1

От JavaDoc:

линия считается быть прекращено любой из перевода строки («\ п»), возврат каретки («\ г»), или возврат каретки с последующим немедленно путем перевода строки.

Таким образом, вы должны добавить один из них в свою строку, которая отправляется.

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