Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 套接字发送和接收字节数组_Java_Arrays_Sockets - Fatal编程技术网

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

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

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
}