2013-07-25 110 views
0

爲什麼我的客戶端在輸入一個FIX消息後不能再接受輸入。客戶端將向服務器端發送FIX消息,服務器將檢查錯誤,並在FIX消息中發送錯誤消息時將消息發送回客戶端。爲什麼我的客戶端不會再接受輸入

問題來了,當我嘗試從客戶端發送另一個FIX消息之前,發送一個,它不會允許我發送任何東西。

客戶端程序

public class TcpClient { 

      public static void main(String[] args) throws IOException { 
       String serverHostname = new String ("WA1235"); //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); 

       System.out.println(in.readLine()); 
       System.out.println(in.readLine()); 

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

服務器程序

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, outputLine; 

     while ((inputLine = in.readLine()) != null) 
      { 
      System.out.println ("Server: " + inputLine); 



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


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

      out.println(outputLine); 

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



      } 


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

    } 

方法

public static String compareClientFixCSV(String[] cTag, String[] cValue, String[] csvTag, String[] csvValue){ 
    int size = csvTag.length; 
    int size2 = csvTag.length; 
    int size3 = cValue.length; 
    int size4 = csvValue.length; 
    System.out.println("cTag size : " + size + ", csvTag: " + size2); 
    System.out.println("csvTag value : " + size3 + ", csvValue: " + size4); 
    String output = null; 
    for(int i = 0; i<= size-1; i++){ 
     if(cTag[i].equals(csvTag[i]) == false){ 
     output = ("Error in tag " + cTag[i]); 


     } 
     else if(cValue[i].equals(csvValue[i]) == false){ 
      output = ("Error in value " + cValue[i]); 


     } 
     else{ 
      output = ("No errors"); 
     } 
    } 


    return output; 
} 

回答

2

只是快速看一下代碼,我看到客戶端等待2行:

System.out.println(in.readLine()); 
System.out.println(in.readLine()); 

和服務器只有1發送:

out.println(outputLine); 

可能這就是問題所在。

我也想會附上一試的客戶端的閱讀部分...趕上... finally塊,像這樣:

try 
{ 
    while (true) 
    { 
     System.out.print("input: "); 
     userInput = stdIn.readLine(); 
     if (userInput == null) break; 
     out.println(userInput); 

     System.out.println(in.readLine()); 
     System.out.println(in.readLine()); 

     if (userInput.equals("Bye.")) 
     { 
      System.out.println("Exit program"); 
      break;   
    } 
    getValueLog(parseFixMsg(userInput,userInput)); 
} 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 
finally 
{ 
    // any of these lines could raise an exception as well. 
    out.close(); 
    in.close(); 
    stdIn.close(); 
    echoSocket.close(); 
} 
相關問題