簡體   English   中英

在readline套接字上驚呆了Java

[英]stunned at readline socket java

我需要進行“靜態”聊天,當我的客戶說“ PAPO”時,我的服務器需要打印PAPO並將PEPO發送給客戶打印。 但是我在服務器上的readLine()上遇到問題,僅在此行停止。

import java.net.*;
import java.io.*;

public class Servidor {

    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(6543);
            do {
                Socket s = server.accept();
                System.out.println("Servidor escutando...");
                BufferedReader entrada = new BufferedReader(
                        new InputStreamReader(s.getInputStream()));
                PrintWriter saida = new PrintWriter(s.getOutputStream());

                System.out.println(entrada.readLine());

                saida.write("PEPO");
                System.out.flush();

                entrada.close();
                saida.close();
                s.close();

            } while (true);
        } catch (UnknownHostException ex) {
            System.out.println("Host desconhecido");
        } catch (IOException ex) {
            System.out.println("Erro na conexao: " + ex.getMessage());
        }
    }
}

客戶:

import java.net.*;
import java.io.*;

public class Cliente {

    public static void main(String[] args) {
        try {
            Socket s = new Socket("localhost", 6543);
            do {
                BufferedReader entrada = new BufferedReader(
                        new InputStreamReader(s.getInputStream()));
                PrintWriter saida = new PrintWriter(s.getOutputStream());

                saida.write("PAPO");

                System.out.println(entrada.readLine());


                entrada.close();
                saida.close();
                s.close();
            } while (true);
        } catch (UnknownHostException ex) {
            System.out.println("Host desconhecido");
        } catch (IOException ex) {
            System.out.println("Erro na conexao: " + ex.getMessage());
        }
    }

}

查看您從客戶端寫的內容:

saida.write("PAPO");

那沒有換行符,所以服務器不知道同一行是否有更多文本。 另外,因為您還沒有刷新過編寫器,所以可能實際上沒有任何數據在發送。 如果只是將其更改為:

saida.write("PAPO\n");
saida.flush();

我懷疑您會發現它可行。

但是,我強烈建議您在使用InputStreamReaderOutputStreamWriter時指定一種編碼,而不是僅使用平台默認值。 如果您控制兩端,那么UTF-8通常是一個不錯的選擇。

暫無
暫無

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

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