要求用ServerSocket和ClientSocket发送文件。控制端与被控端互相可以传超大文件。
目前已经实现。只是觉得方法有优化的余地,希望能得到更好的思路(是思路不一定要给出代码)。
我是这么做的。先传一个标识(比如AAA)字符给对方,然后再传一个结构体给对方。
结构体5个成员是:不含路径的文件名/文件大小/文件属性/附加信息/文件传完毕后是否立即运行。
然后开始传文件本身,文件比较大的时候,在传文件本身时如果想再发送一个字符(比如BBB)就不行了,郁闷。当然我可以开放两个端口,一个专门管接收指令字符,一个传门传文件,于是问题解决。但觉得方法不好,求更佳思路。另:论坛中发贴向专家提问的功能没有了吗?好久没发贴了,变化不小!

解决方案 »

  1.   

    发送BBB有条件吗,传送到什么状态时发送BBB
      

  2.   


    发送BBB只是随便举个例子。可能还发送其它标识字符,完成其它功能。这时候如果一直等到文件传完才能发,效率势必降低不小。谢谢关注我的贴子!
      

  3.   

    1.如果用一个端口 那么每一次发送对协议级别 进行控制  如果控制协议 第一时间发出去
    2.建议 控制协议(tcp)和 文件传输(udp) 是用两个端口是否涉及外网?如果是 每个udp包 现在 1400以内
    读写 文件 用流 读写 这个就不用说了吧。呵呵
      

  4.   

    文件块、文本内容,都放到一个发送队列里,附上优先级。
    队列可以用变体记录来表示,如:
    TBufferInfo = record
      Priority: Integer;
      case BufferType: Integer of
        0: begin
             BlockSize: Integer;
             Buffer: Pointer;
           end;
        1: Text: string;
      end;
    end;
    (以上语法可以有错,好久没写这玩意儿了...)
             
      

  5.   


    意思是每次都传结构不传其它,即把指令AAA或BBB都以结构方式传过去,结构中搞一个byte动态数组来存文件本身的一部分(分块),如果传AAA或BBB时就传一个空的byte或另写一个成员来标识,如果传文件就直接放在byte里来传。这样的话,确实是一种不错的解决方案!
    贴子在五天后结贴,希望看到更好的回复,并视情况加分后结贴。
      

  6.   

    TCP丢包的话TCP协议应该会重发,自己的包是不是需要增加判断机制?
      

  7.   

    您说的很好。不过在拷贝到结构末尾的时候,发送一次,接受会多次激发,当接受到结构后开始接文件,文件比较大没接完时,就无法在中途再接结构体或贴子中所述的BBB字符指令了。