![](/img/trans.png)
[英]Socket ObjectOutputStream writeUTF() and ObjectInputStream readUTF() not working
[英]writeUTF not working :/
我正在对使用DatagramSocket(UDP)发送文件的客户端进行编码,但是首先我们需要使用writeUTF()将文件名发送到服务器。 客户端和服务器都可以编译并运行,没有任何错误,但是文件名似乎从未到达服务器。 对可能发生的事情有任何想法吗? 我在下面发布代码...
谢谢 :)
客户端.java
...
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for (int readNum; (readNum = fis.read(buf)) != -1;)
{
bos.write(buf, 0, readNum); //no doubt here is 0
}
// File data
byte[] data = bos.toByteArray();
DataOutputStream dos = new DataOutputStream(bos);
//file is a String with the name of the file
dos.writeUTF(file);
//Setting up DatagramSocket
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
socket.send(packet);
...
服务器.java
...
almacen = new byte[MAXNOMBREFICHERO + 2];
packet = new DatagramPacket( almacen, almacen.length );
System.out.println("\nWaiting client...");
socket.receive(packet);
dirIPClient = packet.getAddress();
clientPort = packet.getPort();
ByteArrayInputStream bais = new ByteArrayInputStream( almacen );
DataInputStream dis = new DataInputStream( bais );
filename = dis.readUTF();
...
您将文件内容写入bos
并将其转换为字节数组。 因此,您现在已经在data
获得了文件内容。 您将流转换为字节数组后将file
写入bos
,因此不包含文件名。 在将实际文件内容写入bos
之前,请调用writeUTF
。
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
// file is a String with the name of the file
dos.writeUTF(file);
byte[] buf = new byte[1024];
for (int readNum; (readNum = fis.read(buf)) != -1;) {
dos.write(buf, 0, readNum);
}
// Packet data
byte[] data = bos.toByteArray();
// Setting up DatagramPacket
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
socket.send(packet);
您永远不会通过网络发送dos
的内容。 dos
连接到bos
因此写入dos
任何内容都将进入与bos
相关联的byte[]
。 此外, 在调用writeUTF
之前 ,请提取bos
的内容。 这是一次性的事情。 因此,在提取数组内容之后通过调用writeUTF
,可以确保file
不会在该数组中。 如果调用writeUTF
, 然后调用bos.toByteArray()
,则文件bos.toByteArray()
位于数组中(但文件名将位于数组的最后,而不是第一个)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.