java - 通过 telnet.exe 与 Java 服务器套接字通信

标签 java sockets telnet

我正在编写一个简单的服务器来试验服务器套接字和telnet.exe

public static void main(String[] args) throws IOException {
    String line;
    ServerSocket ss = new ServerSocket(5555);
    Socket socket = ss.accept();
    System.out.println("Waiting for a client...");
    InputStream sin = socket.getInputStream();
    OutputStream sout = socket.getOutputStream();
    DataInputStream in = new DataInputStream(sin);
    DataOutputStream out = new DataOutputStream(sout);
    out.writeUTF("\u001B[2J");
    out.writeUTF("Hello client\r\n");
    line = in.readUTF();
    System.out.println("The dumb client just sent me this line : " + line);
    System.out.println("I'm sending it back...");
    out.writeUTF(line);
    out.flush();
    System.out.println("Waiting for the next line...");
    System.out.println();
}

现在我正在运行该服务器并通过telnet.exe连接到他。没关系。但是当我向服务器发送消息时,我没有收到回复:

enter image description here

为什么不起作用?

最佳答案

telnet 客户端以换行符终止每个输入行。但是 DataInputStream 不会将其识别为输入字符串的终止符,因为 DataInputStream 用于二进制数据。

  1. InputStreamReader 包裹您的输入流将其作为基于字符的输入流进行处理。
  2. 然后将其包装在 BufferedReader 中。这样做的优点是,当程序执行时,输入流可以在后台由套接字填充。它还提供了一些方便的实用方法,如下所示。
  3. 使用readLine方法,读取数据直到找到换行符。

像这样:

BufferedReader inputReader = new BufferedReader(new InputStreamReader(in));
[...]
line = inputReader.readLine();

对于将换行符终止的消息基于文本输出回客户端,您应该使用 BufferedReader 的输出模拟,即 PrintWriter .

关于java - 通过 telnet.exe 与 Java 服务器套接字通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777123/

相关文章:

java - 在 Spark 的 Java API 中,如何使用正则表达式从 Dataset<Row> 中选择列?

java - 如何在intellij IDEA中设置默认数据库

linux - 期望 - telnet 连接

java - 使用 Java process exec 通过 tee 命令将 telnet 输出通过管道传输到日志文件

f# - 解析传入 TCP 流的 Ascii 字符,处理退格字符

java - 如何在java中使面板向左或向右滑动?

java - 构建阿里巴巴java示例

javascript - JS日期对象通过套接字转换为字符串?

java - 如何从客户端关闭套接字?

java - Java 中的事件传递库?