Java Socket 编程与 TCP 不工作

标签 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,这样我就能够读取双数。

客户端类

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


}

最佳答案

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

您使用DataOutputStream发送double,因此您需要一个DataInputStream来读取double;两侧。

inputFromServerinputFromClientScanner 更改为 DataInputStream。另外,不要忘记刷新输出并在最后关闭流。

关于Java Socket 编程与 TCP 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28660571/

相关文章:

具有多个节点的 JavaFx 过渡动画

Java 泛型 super /扩展 - 不同的行为(用于 OCP java 8 学习目的)

python tcp socket - 为什么仅在 close() 之后发送 sendall 消息

java - Spring 数据 JPA( hibernate ): How do I retrieve a concrete entity using only a field in its abstract superclass?

java - 如何从 Java/Android 访问 Unity 设置?

java - 重新连接问题

c++ - 多线程和类的全局实例?

c++ - Linux 中的套接字

c# - 从 C# 中的馈线接收大量 tcp 套接字财务数据的最佳方法?

php - PHP Socket Client仅发送和接收一条消息