使用TCP的Java Socket编程无法正常工作

时间:2015-02-22 17:00:06

标签: java sockets tcp network-programming

我一直在尝试编写一个与服务器通信的客户端进程。

我使用了下面相同的代码,但我使用BufferedReader而不是扫描仪,客户端输入是一个字符串。此外,服务器只是将字符串更改为大写并将其发送回客户端以显示在屏幕上。有效。

然而,当我更改代码以便客户端可以输入双号[(例如:1.6)时,服务器应该将其舍入并将其发回以便它将被打印在屏幕上],我得到没有反应。

我收到了这个错误:

run:
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextDouble(Scanner.java:2413)
    at socketserver.SocketServer.main(SocketServer.java:38)
Java Result: 1

注释:

  1. 我正在使用NetBeans。
  2. 我使用Scanner而不是使用BufferedReader,这样我就可以读取一个双号。
  3. 客户端类

    package socketclient;
    
    import java.io.*; 
    import java.net.*; 
    import java.util.Scanner;
    
    
    public class SocketClient {
    
        /**
         * @param args the command line arguments
         */
       public static void main(String args[]) throws Exception 
        { 
            double inputDouble; 
            double modifiedNum; 
    
            Scanner inFromUser = new Scanner(System.in);
    
    
            Socket clientSocket = new Socket("localhost", 6789); 
    
            DataOutputStream outToServer = 
              new DataOutputStream(clientSocket.getOutputStream());
    
    
              Scanner inFromServer = new Scanner(clientSocket.getInputStream());
    
    
            inputDouble = inFromUser.nextDouble(); 
    
            outToServer.writeDouble(inputDouble);
    
    
            modifiedNum = inFromServer.nextDouble(); 
    
            System.out.println("FROM SERVER: " + modifiedNum); 
    
            outToServer.close(); 
            clientSocket.close();
    
        } 
    
    }
    

    服务器类

    package socketserver;
    
    import java.io.*; 
    import java.net.*; 
    import java.util.Scanner;
    
    
    public class SocketServer {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) throws Exception 
        { 
          double clientNum; 
          double roundedNum;
    
          ServerSocket welcomeSocket = new ServerSocket(6789); 
    
          while(true) { 
    
                Socket connectionSocket = welcomeSocket.accept(); 
    
                Scanner inFromClient = new Scanner(connectionSocket.getInputStream());
    
    
                DataOutputStream  outToClient = 
                 new DataOutputStream(connectionSocket.getOutputStream()); 
    
               clientNum = inFromClient.nextDouble(); 
    
    
               roundedNum= Math.round(clientNum);
    
    
               outToClient.writeDouble(roundedNum); 
            } 
        } 
    
    
    }
    

1 个答案:

答案 0 :(得分:1)

您的错误是使用Scanner来读取客户端从服务器发送的数据和反之。

您使用DataOutputStream发送了double,因此您需要DataInputStream才能阅读double;在双方。

Scanner更改为DataInputStreaminputFromServer inputFromClient。另外,请不要忘记flush您的输出和close最后的流。