lulp老兄:
你的想法是对的,但一般说来,除非是局域网的应用,应该尽量使用tcp。
tcp本身在传输层提供了差错控制和重发。它的原则就是:对于一包数据,
要么client/server成功接收。要么失败。
但我们在tcp上编程时还是要处理重发的
问题的。比如:你要发送一个2m的文件,总不成把打成一个tcp包发过去吧?
其实就是仿照tcp的错误控制和重发做一编:
包号,总包数,重发次数。包格式。数据一般使用CRC校验。
还有一个死锁的问题。要考虑。比如建立连接后的一方崩溃问题。另外一方如何
释放资源。
一个比较笨的办法是为每一包数据建立一次连接。无状态的。这样死锁问题
就交给tcp解决了。但这样的效率太低。
不考虑死锁问题的一般思路如下:
Tcp.connect ;
first : send totals package number to romate IP.
n := 1;
againNum := 0;
while n < totals_num do
begin
packaged_Data
;// this function must add crc check to data of package;
send_package( n) ;
if send ok -> then
begin
n := n+1;
end
else
begin
againNum := againNum + 1;
if againNum > MaxAgainNum then
exit(0); //error msg show ! exit.
end;
end;