2014-09-21 115 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(); 
    } 
} 

客户

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(); 
    } 
} 

的问题是我没有从client混得server消息。

+0

也许你没有发送实际的线?服务器正在等待一行 - 不仅仅是一些字节。 – 2014-09-21 12:28:30

+0

@MartinJames:在客户端'sendWelcomeMsg()'我将它写入服务器 – 2014-09-21 12:31:39

+2

为要发送的字符串添加一个换行符('“\ n”')。 – Fildor 2014-09-21 12:34:24

回答

1

JavaDoc

的线被认为是由一个换行中的任何一个(“\ n”),回车(“\ r”),或回车紧接着终止由换行。

所以你必须在你发送的字符串中添加一个。