【问题标题】:Byte array transferring through socket通过套接字传输字节数组
【发布时间】:2016-05-30 16:40:11
【问题描述】:

我正在尝试在客户端-服务器架构中使用 Socket 发送一个简单的字节数组。使用 Netbeans 进行调试也存在问题,因为它给出了:

SocketException:连接重置

所以我在我的代码下面发布,如果有人帮助我,我真的很想。

客户:

public class TestClient {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    try {
        Socket s = new Socket("127.0.0.1", 3242);     

        byte[] b;
        b = "Hello".getBytes();
        DataOutputStream os = new DataOutputStream(s.getOutputStream());
        os.write(b);
    } catch (Exception e) {
        e.printStackTrace();
    }


}

}

服务器:

public class TestServer {

public static void main(String[] args) {
    try {

        byte[] b = new byte[5];
        Socket s = new ServerSocket(3242).accept();
        DataInputStream is = new DataInputStream(s.getInputStream());
        is.read(b);
        System.out.println(String.valueOf(b));
    } catch (Exception e) {
        e.printStackTrace();
    }        
}

}

我尝试简单地使用 InputStream 和 OutputStream,但行为是相同的。

运行上面这些代码的结果是:

[B@25154f

感谢您的关注。

【问题讨论】:

    标签: java arrays sockets byte


    【解决方案1】:

    尝试替换这个

    System.out.println(String.valueOf(b));
    

    有了这个:

    System.out.println(new String(b));
    

    这将使用default encoding 将您的字节数组转换为String。如果服务器和客户端都使用相同的default encoding,它将起作用,否则您需要将双方的编码指定为下一个:

    TestClient"Hello".getBytes(encoding)

    TestServerSystem.out.println(new String(b, encoding))

    【讨论】:

      【解决方案2】:

      那是因为在您的情况下,String.valueOf 将 Object 作为输入(并将其视为对象)。

      如果您确定收到的是字符串,则可以改为调用 new String(b)new String(b, "UTF-8")

      【讨论】:

      • 现在结果是 [72, 101, 108, 108, 111]。它是以字节为单位的“Hello”的正确表示。由此,我怎样才能将“Hello”作为字符串返回?谢谢。 (@NicolasFilotto 给了我使用 String 构造函数的方法)再次感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多