Java套接字编程头

时间:2010-05-22 05:55:47

标签: java sockets header file-transfer

我正在尝试通过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();

3 个答案:

答案 0 :(得分:1)

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

  1. 接收缓冲区是什么类型的?
  2. 您似乎发送和接收了多少个字符?
  3. 您确定接收端的打印声明指向正确的位置吗?

答案 1 :(得分:1)

为什么要通过ObjectOutputStream?可以直接通过OutputStream方法使用write,也可以选择DataOutputStream,如果您发现必要的话。

此外,您不应使用Reader类来传输二进制数据。来自Reader的api:

  

用于阅读字符流的抽象类


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

Transfer a file via 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);

答案 2 :(得分:0)

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