java - 简单的 TCP 连接程序,我在看什么,如何修复它?

标签 java tcp

我目前正在创建一个简单的客户端,它从主机请求时间,并打印任何响应。我对我所看到的内容感到非常困惑,因为输出是我以前从未见过的。这是我的客户端代码,

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

/*
 * 
 * Time tcp client
 */


public class TimeTcp {

    public final static int TIME_PORT = 37;
    public final static int SIZE = 1024;


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

    if(args.length < 1) {
        System.out.println("usage: java TimeTcp host");
        System.exit(1);
    }
    String host = args[0];
    Socket socket = new Socket(host, TIME_PORT);
    DataInputStream fromServer = new DataInputStream(
                                socket.getInputStream());


    byte[] read = new byte[SIZE];

    fromServer.read(read);

    System.out.println(read.toString());
    }
}

但是,我的输出如下所示:[B@4e25154f 从字面上看,这就是它打印的全部内容。 我究竟做错了什么?我应该转换一些东西吗?

谢谢!

编辑:感谢 kolossus 帮助我弄清楚我在看什么。但是,我应该打印的是从我调用的时间服务器获取的时间。我试图使用字节数组来读取服务器发送回的时间内容,然后将其读入单个变量,然后将其转换为Java可以使用的值(时间服务器协议(protocol)发送32位无符号值) ,而 Java 不支持这些),以便可以将其打印回调用客户端的用户。有什么好的办法吗?

最佳答案

你在做什么(错误)

您尝试以错误的方式打印输出(byte 数组)

你所看到的

每个 java 类都有的 toString() 的默认实现。此实现打印对象的哈希码

你应该做什么

System.out.println(Arrays.toString(read));

关于java - 简单的 TCP 连接程序,我在看什么,如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150646/

相关文章:

java - hadoop中的分区文件是如何创建的

java - 安卓加速计

java - 未完成的 stub 异常 Mockito

sockets - Groovy TCP 客户端挂起

c - 在 C 中通过 TCP 发送和接收整数值

cryptography - 进行 tcp 重组时计算 tcp 连接表哈希的最佳方法

java - 从两个 ArrayList 中提取特定连接的对象,组合这些相关对象并从子类中打印

Java:对象分配

java - 摆脱 sun.rmi.transport.tcp.TCPTransport$AcceptLoop executeAcceptLoop 错误

networking - TCP 版本和 AIMD