P2P的UDP穿NAT传输问题 |
答題得分者是:zhweizw
|
fanmeide
一般會員 發表:10 回覆:5 積分:3 註冊:2008-02-24 發送簡訊給我 |
我刚做网络编程,渴望有人指点
在进行UDP打洞以后 ( C端和S端都用的IDUDPSERVER) 两个C端已经可以互相通信 但是 1:有时会掉包 2:直接以流的方式发送出去后,数据会被改变(因为只有一个端口,上边的信息不知道如何做效验) 我想问的问题就是UDP的文件传输如何效验? 主要指完整性 我现在的思路是先把文件读到流,然后把流一段一段的读出来,再在其前面加个结构(思路就卡在这里了,前面不知道加个什么结构以方便另一端验证。。。) 我对STREAM不熟,希望最好能有源码~~如果看不明白,就只看下面的代码吧 我这里假设文件很小,还不到1024 发送端 var mm:tfilestrem; LEN:INTEGER; p:array [0..1023] of byte; begin mm:=tfilestream.creat(mypath,fropen); len:=mm.size; mm.read(p,len); idudpserver2.SendBuffer(chatip,chatport,p,len); //这样就是发文件出去了 我希望的就是在上边的过程中在这个数据包前面加上验证头,类型不限 end; //现在我接受端 代码大概如下。但是不知道怎么验证数据包,希望能有人解答 //同样是IDUDPSERVER2 。所有C端的这个UDPSERVER都既是发送也是接收 var mem:tFileStream; fileName:string; str:string; begin aData.Seek(0,0); setLength(str,aData.size); aData.Read(str[1],aData.Size); if saveDialog1.Execute then begin FileName:=saveDialog1.FileName; if FileExists(filename) then deleteFile(filename); if mem<>nil then begin mem.Free; mem:=nil; end; if not fileExists(FileName) then mem:=TFileStream.Create(FileName,sysutils.fmOpenReadWrite or fmCreate) else mem:=TFileStream.Create(FileName,fmopenReadWrite); end; if mem<>nil then begin mem.Seek(0,2); aData.Seek(0,0); mem.CopyFrom(aData,aData.Size); abinding.SendTo(aBinding.PeerIP,aBinding.PeerPort,str[1],length(str)); application.ProcessMessages; end; end; |
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
|
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
|
fanmeide
一般會員 發表:10 回覆:5 積分:3 註冊:2008-02-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |