簡體   English   中英

使用TCP的Java套接字編程不起作用

[英]Java Socket programming with TCP not working

我一直在嘗試編寫將與服務進行通信的客戶端流程。

我在下面使用了相同的代碼,但不是使用BufferedReader,而是使用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 DataOutputStream ,因此需要一個DataInputStream來讀取double DataInputStream 雙方。

將您的Scanner更改為DataInputStream ,以用於inputFromServerinputFromClient 同樣不要忘記flush輸出並最后close流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM