2014-05-17 240 views
-1

我有問題與我的客戶端服務器。當我運行服務器,客戶端後,服務器寫入客戶端連接到服務器,但我可以在控制檯中寫任何東西。任何人都可以檢查問題在哪裏?因爲我是新來的java。我也嘗試掃描儀,但它不工作。服務器和客戶端在java

服務器:

package ts_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; 

public class Server 
{ 
    private static final int PORT = 50000; 
    static boolean flaga = true; 

    private static ServerSocket serverSocket; 
    private static Socket clientSocket; 

    public static void main(String[] args) throws IOException 
    { 
     serverSocket = null; 
     try 
     { 
      serverSocket = new ServerSocket(PORT); 
     } 
     catch(IOException e) 
     { 
      System.err.println("Could not listen on port: "+PORT); 
      System.exit(1); 
     } 

     System.out.print("Waiting for connection..."); 

     Thread t = new Thread(new Runnable() 
     { 
      public void run() 
      { 
       try 
       { 
        while(flaga) 
        { 
         System.out.print("."); 
         Thread.sleep(1000); 
        } 
       } 
       catch(InterruptedException ie) 
       { 
        // 
       } 

       System.out.println("\nClient connected on port "+PORT); 
      } 
     }); 
     t.start(); 

     clientSocket = null; 
     try 
     { 
      clientSocket = serverSocket.accept(); 
      flaga = false; 
     } 
     catch(IOException e) 
     { 
      System.err.println("Accept failed."); 
      t.interrupt(); 
      System.exit(1); 
     } 

     final PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true); 
     final BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

     t = new Thread(new Runnable() 
     { 
      public void run() 
      { 
       try 
       { 
        Thread.sleep(5000); 

        while(true) 
        { 
         out.println("Ping"); 
         System.out.println(System.currentTimeMillis()+" Ping sent"); 

         String input = in.readLine(); 

         if(input.equals("Pong")) 
         { 
          System.out.println(System.currentTimeMillis()+" Pong received"); 
         } 
         else 
         { 
          System.out.println(System.currentTimeMillis()+" Wrong answer"); 

          out.close(); 
          in.close(); 
          clientSocket.close(); 
          serverSocket.close(); 
          break; 
         } 


         Thread.sleep(5000); 
        } 
       } 
       catch(Exception e) 
       { 
        System.err.println(System.currentTimeMillis()+" Unexpected Error"); 
       } 
      } 
     }); 
     t.start(); 
    } 
} 

客戶端:

package ts_client; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.Socket; 

public class Client 
{ 
    private static final int PORT = 50000; 
    private static final String HOST = "localhost"; 

    public static void main(String[] args) throws IOException 
    { 
     Socket socket = null; 

     try 
     { 
      socket = new Socket(HOST, PORT); 
     } 
     catch(Exception e) 
     { 
      System.err.println("Could not connect to "+HOST+":"+PORT); 
      System.exit(1); 
     } 

     final PrintWriter out = new PrintWriter(socket.getOutputStream(),true); 
     final BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

     Thread t = new Thread(new Runnable() 
     { 
      public void run() 
      { 
       long start = System.currentTimeMillis(); 

       while (true) 
       { 
        try 
        { 
         String input = in.readLine(); 

         if (input != null) 
         { 
          System.out.println(System.currentTimeMillis() + " Server: " + input); 
         } 

         if (input.equals("Ping")) 
         { 
          if(System.currentTimeMillis()-start>30000) 
          { 
           out.println("Pon g"); 
           System.out.println(System.currentTimeMillis() + " Client: Pon g"); 
           break; 
          } 

          out.println("Pong"); 
          System.out.println(System.currentTimeMillis() + " Client: Pong"); 
         } 
        } 
        catch (IOException ioe) 
        { 
         // 
        } 
       } 
      } 
     }); 
     t.start(); 

     out.close(); 
     in.close(); 
     socket.close(); 
    } 
} 
+0

究竟是什麼問題?你期望這個代碼做什麼以及它做了什麼? –

+0

你忽略了許多例外 - 不要這樣做。這就像騎摩托車帶着眼罩 - 不是一件非常安全的事情。 –

回答

2

不要關閉流和插孔,直到客戶端運行。

out.close(); 
in.close(); 
socket.close(); 
+0

對'static boolean flaga = true;'使用'volatile'作爲多線程訪問。 – Braj

+0

謝謝,這就是問題:) – user3084640

+0

沒有。你最歡迎 – Braj