如何确保我的服务器读取客户端编写的内容?

我正在从套接字客户端写一个字节数组:
byte[] arr = { 49, 49, 49, 49, 49};

InetAddress address = InetAddress.getByName(host);
connection = new Socket(address, port);
out = new ObjectOutputStream(connection.getOutputStream());
out.flush();
在接收端,在服务器上我有:
byte[] msgType = new byte[5];
in = new BufferedInputStream(connection.getInputStream());
int bytesRead = in.read(msgType, 0, 5);

System.out.println("msg rcvd: " + msgType.toString());
在输出中我得到奇怪的字符串:
server: waiting for connection
server: connection received from localhost
server: Connection Successful
bytes read: 5
msg rcvd: ��w
如何确保我从客户端发送的字节数相同?     
已邀请:
如果您在一侧使用
ObjectOutputStream
,则必须在另一侧使用
ObjectInputStream
。 在你的情况下,一个简单的OutputStream(可能是缓冲的)和
.write()
.read()
都可以。 但是对于打印,请不要使用
byte[].toString()
,如果您想要格式化输出,请使用
Arrays.toString()
。 编辑:我只是看到你甚至没有在发送端写你的阵列。所以你实际上只是在阅读ObjectOutputStream标头。 来自评论:   我正在处理服务器端,我被告知我将发送一个字节数组。怎么样   接收并打印该字节数组?在这种情况下,字节数组是文本/字符串的字节 这听起来像服务器发送的东西就像在某些编码中编码的字符串,如ASCII,UTF-8或ISO-8859-1。如果是这样,在接收端你可以使用这样的东西:
String encoding = "UTF-8";
BufferedReader in =
    new BufferedReader(new InputStreamReader(connection.getInputStream(),
                                             encoding));
String line;
while((line = in.readLine()) != null) {
    System.out.println(line);
}
当然,请确保编码与发送方实际使用的编码相同。 相应的发送代码可能是这样的:
String encoding = "UTF-8";
Writer w =
    new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(),
                                              encoding));
w.write("Hello World!n");
w.write("And another line.n");
w.flush();
    
我不确定究竟是什么打印出来,但我可以告诉你,
msgType.toString()
不会打印字节数组的内容。 这是我找到的一个方法的链接,它将以更有意义的方式打印出字节数组。     
你获得相同的字节,这只是你如何解释它们的问题。如果你想看到字节为
String
而是使用它:
System.out.println("msg rcvd: " + new String(msgType, "UTF-8"));
请注意,您正在处理的字节具有正确的编码(我在这里假设为UTF-8)。既然你已经
ObjectOutputStream
了,你可以在服务器端使用它的
writeUTF()
,在客户端使用
ObjectInputStream.readUTF()
。     

要回复问题请先登录注册