要求用ServerSocket和ClientSocket发送文件。控制端与被控端互相可以传超大文件。
目前已经实现。只是觉得方法有优化的余地,希望能得到更好的思路(是思路不一定要给出代码)。
我是这么做的。先传一个标识(比如AAA)字符给对方,然后再传一个结构体给对方。
结构体5个成员是:不含路径的文件名/文件大小/文件属性/附加信息/文件传完毕后是否立即运行。
然后开始传文件本身,文件比较大的时候,在传文件本身时如果想再发送一个字符(比如BBB)就不行了,郁闷。当然我可以开放两个端口,一个专门管接收指令字符,一个传门传文件,于是问题解决。但觉得方法不好,求更佳思路。另:论坛中发贴向专家提问的功能没有了吗?好久没发贴了,变化不小!
目前已经实现。只是觉得方法有优化的余地,希望能得到更好的思路(是思路不一定要给出代码)。
我是这么做的。先传一个标识(比如AAA)字符给对方,然后再传一个结构体给对方。
结构体5个成员是:不含路径的文件名/文件大小/文件属性/附加信息/文件传完毕后是否立即运行。
然后开始传文件本身,文件比较大的时候,在传文件本身时如果想再发送一个字符(比如BBB)就不行了,郁闷。当然我可以开放两个端口,一个专门管接收指令字符,一个传门传文件,于是问题解决。但觉得方法不好,求更佳思路。另:论坛中发贴向专家提问的功能没有了吗?好久没发贴了,变化不小!
发送BBB只是随便举个例子。可能还发送其它标识字符,完成其它功能。这时候如果一直等到文件传完才能发,效率势必降低不小。谢谢关注我的贴子!
2.建议 控制协议(tcp)和 文件传输(udp) 是用两个端口是否涉及外网?如果是 每个udp包 现在 1400以内
读写 文件 用流 读写 这个就不用说了吧。呵呵
队列可以用变体记录来表示,如:
TBufferInfo = record
Priority: Integer;
case BufferType: Integer of
0: begin
BlockSize: Integer;
Buffer: Pointer;
end;
1: Text: string;
end;
end;
(以上语法可以有错,好久没写这玩意儿了...)
意思是每次都传结构不传其它,即把指令AAA或BBB都以结构方式传过去,结构中搞一个byte动态数组来存文件本身的一部分(分块),如果传AAA或BBB时就传一个空的byte或另写一个成员来标识,如果传文件就直接放在byte里来传。这样的话,确实是一种不错的解决方案!
贴子在五天后结贴,希望看到更好的回复,并视情况加分后结贴。