[英]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
筆記:
客戶類
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
,以用於inputFromServer
和inputFromClient
。 同樣不要忘記flush
輸出並最后close
流。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.