0

我正在尝试通过 java 套接字发送文件并通过另一个套接字接收它。但是,会发生这种情况:

发送内容:

/* 这只是一个要传输的文件 */

已收到:

所以基本上我无法在堆栈溢出时逃避接收到的内容。它基本上是一堆不可读的字节(大约 32 个字节),然后是我发送的消息。

OutputStream os = sock.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(mybytearray);
oos.flush();
oos.close();

对于客户:

BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
FileOutputStream fos = new FileOutputStream("newfile.java");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
bos.write(mybytearray, 0 , current);
bos.flush();
bos.close();
sock.close();
4

3 回答 3

1

查看代码会有所帮助,但是您所拥有的看起来像是基本的随机数据。需要检查的一些事项:

  1. 接收缓冲区是什么类型的?
  2. 您似乎发送和接收了多少个字符?
  3. 您确定接收端的打印语句指向正确的位置吗?
于 2010-05-22T06:07:51.050 回答
1

为什么要通过ObjectOutputStream?要么OutputStream直接通过该方法使用,要么在您认为有必要时write选择例如。DataOutputStream

此外,您不应该使用这些Reader类来传输二进制数据。从 api Reader

用于读取字符流的抽象类。


可以在此处找到完整的“通过套接字发送文件”示例:

通过 Socket 传输文件

关键服务器端代码:

  OutputStream os = sock.getOutputStream();
  System.out.println("Sending...");
  os.write(mybytearray,0,mybytearray.length);
  os.flush();
  sock.close();

关键客户端代码:

bytesRead = is.read(mybytearray,0,mybytearray.length);
于 2010-05-22T06:11:15.023 回答
0

这没有任何意义。如果您使用 ObjectOutputStream,则必须使用 ObjectInputStream 来读取它。如果你想使用 Reader 来读取它,你必须使用 Writer 来编写它。

于 2010-05-22T10:17:09.203 回答