簡體   English   中英

Java中的TCP服務器和客戶端

[英]TCP Server and Client in Java

我嘗試使用 Java 構建 TCP 服務器和客戶端。 他們可以連接,運行良好,但我有一個錯誤。

這是服務器端:

package com.company;
import java.io.*;
import java.net.*;

public class Main {

    public static void main (String[] args) throws IOException {

        System.out.println("The server is ready");
        ServerSocket serverSocket = new ServerSocket (1234);
        Socket clientSocket = serverSocket.accept ();

        BufferedReader in = new BufferedReader (new InputStreamReader (clientSocket.getInputStream ()));
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        String message, modifiedMessage;
        message = in.readLine ();
        System.out.print("The received message from client: " + message);
        modifiedMessage = message.toUpperCase();
        out.print(modifiedMessage);
        System.out.println ("\nModified message which is sent to client: " + modifiedMessage);
    }

}

服務器必須從客戶端接收消息,然后將其轉換為大寫字符串。

客戶端是:

package com.company;
import java.io.*;
import java.net.*;

public class Main {

    public static void main(String[] args) throws IOException {

        Socket socket = new Socket("127.0.0.1", 1234);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        System.out.println("Enter a lowercase sentence: ");
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       BufferedReader in = new BufferedReader((new InputStreamReader(socket.getInputStream())));

        String messageSent = reader.readLine();
        System.out.println("The message sent is: " + messageSent);
        out.println(messageSent);


        String messageReceived = in.readLine();
        System.out.println("The modified message is: " + messageReceived);
    }
}

我希望客戶端能夠打印小寫句子和接收到的(修改后的)大寫句子。 問題是,當我輸入一個簡單的單詞 say hello 時,我的客戶端只會打印原始字符串,而不是修改后的字符串。

服務器的輸出是:

The received message from client: hello 
The modified message sent to the client is: HELLO

但是客戶端的輸出是:

The message sent is: hello 
The modified message is: null

我知道服務器能夠將字符串轉換為大寫版本並連接到我的客戶端。 為什么我的客戶端不打印收到的消息? 它真的沒有收到嗎?

您需要刷新消息。 PrintWriter 在 println 中調用 flush,print 不調用。

在服務器端,您需要更改為: out.println(modifiedMessage); 而不是 out.print(modifiedMessage);

暫無
暫無

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

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