有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的客户端不再接受输入

为什么我的客户端在输入一条修复消息后不再接受输入。客户端将向服务器端发送修复消息,服务器将检查错误,如果修复消息中有错误或没有错误,则将消息发回客户端

当我试图从客户端发送另一条修复消息时,问题就出现了,在发送之前,它不允许我发送任何东西

客户端程序

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

共 (1) 个答案

  1. # 1 楼答案

    快速查看一下代码,我看到客户机等待两行代码:

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

    服务器只发送1:

    out.println(outputLine);
    

    也许这就是问题所在

    我也会附上客户的阅读部分在一个尝试。。。接住最后,像这样:

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