Java 套接字发送和接收字节数组
在服务器端,我已经通过Java套接字向客户端发送了一个字节数组Java 套接字发送和接收字节数组,java,arrays,sockets,Java,Arrays,Sockets,在服务器端,我已经通过Java套接字向客户端发送了一个字节数组 byte[] message = ... ; DataOutputStream dout = new DataOutputStream(client.getOutputStream()); dout.write(message); 如何从客户端接收此字节数组?首先,除非确实需要,否则不要使用DataOutputStream。第二: Socket socket = new Socket("host", port); OutputS
byte[] message = ... ;
DataOutputStream dout = new DataOutputStream(client.getOutputStream());
dout.write(message);
如何从客户端接收此字节数组?首先,除非确实需要,否则不要使用
DataOutputStream
。第二:
Socket socket = new Socket("host", port);
OutputStream socketOutputStream = socket.getOutputStream();
socketOutputStream.write(message);
当然,这缺少任何错误检查,但这应该可以让您继续。是您的朋友,可以为您提供很多帮助。有一个JDK套接字教程,它涵盖了服务器端和客户端。那看起来和你想要的一模一样 (来自该教程)设置为从echo服务器读取:
echoSocket = new Socket("taranis", 7);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
获取字节流并通过读取器转换为字符串,并使用默认编码(通常不建议)
上面省略了错误处理和关闭套接字/流,但请查看教程。您需要将消息设置为固定大小,或者需要发送大小,或者需要使用一些分隔符 这是已知大小(100字节)的最简单情况:
在这种情况下,
DataInputStream
是有意义的,因为它提供了readFully()
。如果不使用它,您需要循环自己,直到读取预期的字节数。试试这个,它对我有效。发送者:
接收器:
BufferedReader不允许您以字节[]的形式读取输入,是吗?我不知道这如何回答在同一套接字上发送和接收的问题。为什么不使用DataOutputStream?它是否增加了一些显著的开销?dOut.writeInt(message.length);写(信息);他是赢家。谢谢@franta
in = new DataInputStream(server.getInputStream());
byte[] message = new byte[100]; // the well known size
in.readFully(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
}