套接字发送和接收字节数组

在服务器中,我通过Java套接字向客户端发送了一个字节数组

byte[] message = ... ; DataOutputStream dout = new DataOutputStream(client.getOutputStream()); dout.write(message); 

如何从客户端接收此字节数组?

试试这个,它对我有用。

发件人:

 byte[] message = ... Socket socket = ... DataOutputStream dOut = new DataOutputStream(socket.getOutputStream()); dOut.writeInt(message.length); // write length of the message dOut.write(message); // write the message 

接收器:

 Socket socket = ... DataInputStream dIn = new DataInputStream(socket.getInputStream()); int length = dIn.readInt(); // read length of incoming message if(length>0) { byte[] message = new byte[length]; dIn.readFully(message, 0, message.length); // read the message } 

首先,除非确实需要,否则不要使用DataOutputStream 。 第二:

 Socket socket = new Socket("host", port); OutputStream socketOutputStream = socket.getOutputStream(); socketOutputStream.write(message); 

当然这没有任何错误检查,但这应该让你去。 JDK API Javadoc是您的朋友,可以为您提供很多帮助。

这里有一个JDK套接字教程,它涵盖了服务器端和客户端。 这看起来完全像你想要的。

(来自该教程)这设置为从echo服务器读取:

  echoSocket = new Socket("taranis", 7); out = new PrintWriter(echoSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader( echoSocket.getInputStream())); 

获取字节流并通过阅读器转换为字符串并使用默认编码(通常不建议)。

从上面省略了error handling和关闭套接字/流,但请查看教程。

您需要将消息设置为固定大小,或者需要发送大小,或者需要使用一些分隔符。

对于已知大小(100字节),这是最简单的情况:

 in = new DataInputStream(server.getInputStream()); byte[] message = new byte[100]; // the well known size in.readFully(message); 

在这种情况下, DataInputStream是有意义的,因为它提供了readFully() 。 如果不使用它,则需要循环自己,直到读取预期的字节数。