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

时间:2009-07-24 07:01:07

标签: java arrays sockets

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

byte[] message = ... ;

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

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

4 个答案:

答案 0 :(得分:59)

试试这个,它为我工作。

发件人:

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
}

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:3)

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

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

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

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

错误处理和关闭上面省略的套接字/流,但请查看教程。

答案 3 :(得分:1)

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

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

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

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