我想在局域网里实现服务器向客户端发送文件夹
第一个问题:是应该用ObjectInputStream和ObjectOutputStream序列化发送和反序列化读取保存数据的byte[]数组对象好呢还是用DataInputStream和DataOutputStream好?
第二个问题:每当传送完一个文件后,是应该关闭流呢还是发送一个结束标记?我是一个菜鸟,试了很多中方法都不行。
各位路过的朋友,帮帮小弟吧。
我这样想的:
服务器端:
Socket serverSockt;
FileInputStream fis;DataInputStream dis;或ObjectInputStream
DataOutputStream dos;或ObjectOutputStream
客户端同上。如果有愿意发代码的,请发我邮箱[email protected]
谢谢各位了。socket

解决方案 »

  1.   

    发文件夹的话你得自己设计协议了,没有一句话可以搞定的
    Stream当然是用Data,更灵活
    第二个问题要看你协议怎么设计了,一般是不关闭流比较好
      

  2.   

    协议就是收发数据的方式,并不是代码。
    比如你可以指定一个协议,规定你的客户端和服务器端交换数据的基本单元是“消息”,本质是一串字节,只不过这串字节有自己的格式。
    比如:{ int length, byte type, byte[] data } 这是最基本的构造。服务器端写入的时候就按照这个顺序分别序列化消息长度,消息类型和消息内容。消息类型你自己定义。客户端读取的时候可以这样(这里用伪代码)
    int length = socketChannel.readInt();
    byte messageType = socketChannel.readByte();
    byte[] data = new byte[length];
    socketChannel.readByteArray(data, length);
    switch (messageType) {
      case 1:
        processType1Data(data);
        break;
      case 2:
        processType2Data(data);
        break;
      default:
        throw new RuntimeException("Received data type not defined");
    }
    假设这里的readInt和readByte是从输入流读取一个int或byte,readByteArray是读取指定长度(length)的byte[]。相关的API都可以在nio.SocketChannel中找到,具体实现当然不一样,这个就要你自己去研究了。