ユニットUnit1は、 インタフェースが 使用する Windowsの、メッセージ、sysutilsの、バリアント、クラス、グラフィックス、コントロール、フォーム、 ダイアログ、IdBaseComponent、IdComponent、IdTCPConnection、IdTCPClient、 StdCtrls; 入力 TForm1 = クラス(TFormは) btnReceive:のTButtonと、 IdTCPClient1:TIdTCPClient。 btnSend:TButtonの。 手順btnReceiveClick(送信者:TObjectを); 手順FormCreate(送信者:TObjectを); 手順btnSendClick(送信者:TObjectを); プライベート { プライベート宣言} 公共 { 公開宣言} 終わります。 VAR をForm1:TForm1; 実装 { $ R * .DFM } 手順TForm1.btnReceiveClick(送信者:TObjectを)。 VaRの rbyte:配列 [ 0 .. 4096 ] のバイト。 SFILE:TFileStream。 iFileSize:整数; 開始 iFileSize: = IdTCPClient1.ReadInteger。 SFILE: = TFileStream。作成し(' xx.pdf ' 、fmCreateを)。 iFileSizeながら > 4096は ない 始まります IdTCPClient1.ReadBuffer(rbyte、4096)。// .ReadBuffer(rbyte、ILEN)。 sFile.Write(rByte、4096 )。 INC(iFileSize、 - 4096 )。 エンド; IdTCPClient1.ReadBuffer(rbyte、iFileSize)。// .ReadBuffer(rbyte、ILEN)。 sFile.Write(rByte、iFileSize)。 sFile.Free; ShowMessage(' ファイルOK入手!' ); エンド; 手順TForm1.FormCreate(送信者:TObjectを); 開始 // IdTCPClient1.BoundIP:= '127.0.0.1'; // IdTCPClient1.BoundPort:= 90011; IdTCPClient1.Host: = ' 127.0.0.1 ' 。 IdTCPClient1.Port: = 9000 ; IdTcpClient1.Connect(5000 ); self.Caption: = ' 启动' ; エンド; 手順TForm1.btnSendClick(送信者:TObjectを); VAR iFileHandle:整数; iFileLen、CNT:整数; BUF:配列 [ 0 .. 4096 ] のバイト。 開始 // IdTCPClient1.Host:='127.0.0.1'を; // IdTCPClient1.Port:= 9000; //IdTCPClient1.Connect(5000); 場合 IdTCPClient1.Connectedはその後、 開始 iFileHandle: =のFileOpen(' xx.pdf ' 、fmOpenReadを)。 iFileLen: = FileSeek(iFileHandle、0、2)。// 2:soFromBeginning:ファイルの終わりから FileSeek(iFileHandle、0、0 ); // ProgressBar1.Max:= iFileLen。 // ProgressBar1.Position:= 0; IdTCPClient1.WriteLn(' xx.pdf ' + ' | ' + IntToStr(iFileLen)); しばらく trueにはない 始まり でApplication.ProcessMessagesを; CNT: = FileRead関数(iFileHandle、BUF、4096 ); IdTCPClient1.WriteBuffer(BUF、CNT); // IdTCPClient1.WriteInteger(CNT); // ProgressBar1.Position:= CNT + ProgressBar1.Position ; // StatusBar1.Panels [0]の.text:= 'ファイル送信...'; IF CNT < 4096 その後、 BREAK ; エンド; FileCloseを(iFileHandle); // Label2.Caption:= 'ファイル転送が完了しました!'; // StatusBar1.Panels [0]の.text:= 'ファイル転送が完了した!'; エンド; エンド; 終わり。 ユニットUnit1は、 インターフェイスは 使用しています Windowsの、メッセージ、sysutilsの、バリアント、クラス、グラフィックス、コントロール、フォーム、 ダイアログ、StdCtrls、IdBaseComponent、IdComponent、IdTCPServerを。 入力 TForm1 = クラス(TFormは) IdTCPServer1:TIdTCPServerと、 手順IdTCPServer1Execute(AThread:TIdPeerThread)。 手順FormCreate(送信者:TObjectを); 手順IdTCPServer1Connect(AThread:TIdPeerThread)。 プライベート { プライベート宣言} 公共 { 公開宣言} エンド。 VAR Form1:TForm1、 実装 { $ R&LT * DFMは} 使用IdSocketHandleを; // サーバーが受信する 手順TForm1.IdTCPServer1Execute(AThread:TIdPeerThread); VARの :rbyte アレイ [ 0 .. 4096 ] のバイト; SFILE:TFileStream、 CNT、CMDを、ファイルサイズ:整数; STRファイル名:文字列; 始める STR: = AThread.Connection.ReadLn; // ファイルサイズとファイル名が受信 CMD: = POS(' | '、STR); // 区切り文字を探します ファイル名:=コピー(文字列、1、cmd- 1); // ファイル名を抽出 // IdTCPClient1.WriteLn(ExtractFileName(edtFileName.Text)+ '|' + IntToStr(iFileLen)); ファイルサイズ:= StrToInt(コピー(STR 、CMD + 1、長さ(STR)-cmd + 1)); //は、ファイルサイズを抽出し たIFはMessageBox(0、PChar型(' ユーザー' + AThread.Connection.Socket.Binding.PeerIP + "は、"ファイルを転送するためにあなたを与えるために' + +ファイル名を' 「あなたは受け入れるか拒否する?『)、』ファイルを受け入れるように"、MB_YESNO または MB_ICONQUESTION)= ID_Yes その後、 // 受信するかどうかを尋ね 始める // //初期化の進捗バー; =ファイルサイズ:ProgressBar1.Max // ProgressBar1.Position:= 0; // SaveDialog1.FileName:=ファイル名;デフォルトのファイル名を保存する場所を//も、指定したことを確認するにSaveDialog1.Executeは、前、またはファイル名がnullです // ; SaveDialog1.Execute // = TFileStream.Create(SaveDialog1.FileName、fmCreate); //ストリーム書き込まれるファイルを作成します。SFILE SFILE:= TFileStreamを作成します(ファイル名、fmCreate); // ファイルを作成するには、ストリーム書き込まれる ファイルサイズながら> 4096が 行うを 開始 AThread.Connection.ReadBufferを(rbyte、4096); // ファイルストリーム読み込み 、sFile.Write(rByte 4096を); // ファイルストリームを書き込む @ CNT:= AThread.Connection.ReadInteger; //は、送信側の進捗から最新の位置情報を受信する @ ProgressBar1.Position:= CNT + ProgressBar1.Position; //進捗表示を更新 @ Label1.Caption:= '現在受信進捗..'; // StatusBar1.Panels [0]の.text:= 'ファイル受信...'; incが(ファイルサイズ、 -である4096 ); エンド; AThread.Connection.ReadBuffer (rbyte、ファイルサイズ); // .ReadBuffer(rbyte、ILEN); sFile.Write(rByte、ファイルサイズ); sFile.Free; // StatusBar1.Panels [0]の.text:= '完了を受信したファイル!'; // Label1.Caption:= 'ファイル受信完了!'; エンド; END; 手順TForm1.FormCreate(送信者:TObjectを); VARの H:TIdSocketHandle; 始める 開始 IdTCPServer1.DefaultPort: = 9000 ; // = IdTCPServer1.Bindings.Add; H // h.IP:= '127.0.0.1を'; // h.Port:= 90011; IdTCPServer1.Active:= 真; Self.Caption: = ' 開始' ; エンド; エンド; // サーバーは、ファイル送信 手順TForm1.IdTCPServer1Connect(AThread:TIdPeerThreadを); VAR :;整数iFileHandle 、iFileLen CNT:整数; bufは:配列 [ 0 .. 4096 ] のバイト。 開始 iFileHandle: =のFileOpen(' xx.pdf ' 、fmOpenRead)。 iFileLen: = FileSeek(iFileHandle、0、2 )。 FileSeek(iFileHandle、0、0 ); AThread.Connection.WriteInteger(iFileLen)。 しばらく真DO 始める CNT: = FileRead関数(iFileHandle、BUF、4096 ); AThread.Connection.WriteBuffer(BUF、CNT)。 もし CNT < 4096 その後、 休憩; エンド; FileCloseを(iFileHandle)。 エンド; 終わり。
ファイルのダウンロードやアップロードのidtcp
おすすめ
転載: www.cnblogs.com/tobetterlife/p/12169515.html
おすすめ
ランキング