2013-07-24 64 views
0

我只是想發送一個簡單的字符串到客戶端,但它並沒有這樣做。 它只會跳過out.println語句,只是正確執行程序的其餘部分。 是out.println從服務器端發送到客戶端的錯誤語句?爲什麼我的聲明不會發送給客戶端?

我只是想通過使用此代碼發送「你好」。

out.println("hello"); 

用於服務器端

public class TcpServerCompareCSV { 

    public static void main(String[] args) throws IOException{ 
     Scanner console = new Scanner(System.in); 
     System.out.println("Type in CSV file location: "); 
     //String csvName = console.nextLine(); 
      String csvName = "C:\\Users\\Downloads\\orders.csv"; 


     ServerSocket serverSocket = null; 

     try { 
      serverSocket = new ServerSocket(57634); 
      } 
     catch (IOException e) 
      { 
      System.err.println("Could not listen on port: 57635."); 
      System.exit(1); 
      } 

     Socket clientSocket = null; 
     System.out.println ("Waiting for connection....."); 

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

     System.out.println ("Connection successful"); 
     System.out.println ("Waiting for input....."); 

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

     String inputLine; 
     Boolean comp; 
     while ((inputLine = in.readLine()) != null) 
      { 

      ***out.println("hello");*** 

      if (inputLine.trim().equals("Bye.")) { 
       System.out.println("Exit program"); 
       break; 
       } 

      Scanner input1 = new Scanner(new File(csvName)); 
      Scanner input2 = new Scanner(new File(csvName)); 
      Scanner input3 = new Scanner(new File(csvName)); 
      Scanner input4 = new Scanner(new File(csvName)); 

      System.out.println ("Server: " + inputLine); 

      String csvline = getCsvLineVal (getLocation34CSV(getTag34Value(Tag34Location(getTagCSV(parseFixMsg(inputLine ,inputLine))), getValueCSV(parseFixMsg(inputLine ,inputLine))), getVal34(input1, input2)), getCSVLine(input3, input4)); 
      comp = compareClientFixCSV(getTagCSV(parseFixMsg(inputLine ,inputLine)), getValueCSV(parseFixMsg(inputLine ,inputLine)), getCSVTag(csvline), getCSVValue(csvline)); 

      if(comp) 
       out.println(noError); 
      else 
       out.println(Error); 


      input1.close(); 
      input2.close(); 
      input3.close(); 
      input4.close(); 



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

    } 

程序客戶端

public class TcpClient { 

      public static void main(String[] args) throws IOException { 
      String serverHostname = new String ("WA12345"); //127.0.0.1 

       if (args.length > 0) 
        serverHostname = args[0]; 
       System.out.println ("Attemping to connect to host " + 
       serverHostname + " on port 57634."); 

       Socket echoSocket = null; 
       PrintWriter out = null; 
       BufferedReader in = null; 

       try { 
        // echoSocket = new Socket("taranis", 7); 
        echoSocket = new Socket(serverHostname, 57634); 
        out = new PrintWriter(echoSocket.getOutputStream(), true); 
        in = new BufferedReader(new InputStreamReader(
               echoSocket.getInputStream())); 
       } catch (UnknownHostException e) { 
        System.err.println("Don't know about host: " + serverHostname); 
        System.exit(1); 
       } catch (IOException e) { 
        System.err.println("Couldn't get I/O for " 
             + "the connection to: " + serverHostname); 
        System.exit(1); 
       } 

      BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
      String userInput; 

       System.out.print ("input: "); 

      while ((userInput = stdIn.readLine()) != null) { 
       out.println(userInput); 


       if (userInput.equals("Bye.")){ 
        System.out.println("Exit program"); 
         break;   
       } 
       getValueLog(parseFixMsg(userInput,userInput)); 
        System.out.print ("input: "); 

      } 

      out.close(); 
      in.close(); 
      stdIn.close(); 
      echoSocket.close(); 
      } 

回答

1

你永遠從套接字輸入流中的客戶端程序中讀取(通過聲明in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));創建),以便程序你永遠不會嘗試接收它。

你需要在你的循環客戶端程序in.readLine(),後

while ((userInput = stdIn.readLine()) != null) { 
       out.println(userInput); 

它應該是這樣的:

System.out.println(in.readLine()); 
相關問題