บทความนี้เกิดจากการที่ผมได้รับเมล์จากคุณ
jarun prungpemsuk ที่ได้เมล์มาสอบถามถึงวิธีการส่งไฟล์ ผ่านเครือข่าย โดยใช้
Delphi ครับ ผมเห็นว่ามันมีประโยชน์สำหรับเพื่อนๆอีกหลายคนที่กำลังศึกษา
เรื่องนี้อยู่ ก็เลยนำมาทำเป็นบทความให้อ่านกันนะครับ วิธีที่ผมเลือกใช้ก็คือการใช้
Component ที่ชื่อ TNMStrm,TNMStrmServ ที่อยู่ในชุดของ FastNet Component
Pallete ดังรูปด้านล่างฮะ
ซึ่งในบทความนี้จะแสดงตัวอย่างการส่งเฉพาะไฟล์รูปภาพต่างๆ
ซึ่งสามารถดัดแปลงไปส่งไฟล์อื่นๆ ได้แช่นกันครับ
1. เริ่มต้นกันที่เปิด Delphi แล้วออกแบบหน้าตา
โปรแกรมดังรูปนะครับ
โดยจะใช้ Component ต่างๆได้แก่ Image,
Edit, Button, OpenPictureDialog, NMStrm และ NMStrmServ แล้วทำการกำหนด
Property Text ของ Edit1 เป็น 127.0.0.1
2. ทำการ Double Click ที่ button1
แล้วป้อนโค้ดในการส่งไฟล์ดังนี้
procedure TForm1.Button1Click(Sender: TObject);
var MyFStream: TFileStream;
begin
if OpenPictureDialog1.Execute then
begin
NMStrm1.Host :=Edit1.Text;
try
MyFStream :=TFileStream.Create(OpenPictureDialog1.FileName,fmOpenRead);
NMStrm1.PostIt(MyFStream);
finally
MyFStream.Free;
end;
end;
end;
|
โค้ดข้างต้นจะเป็นการเปิดเลือกไฟล์รูปภาพที่ต้องการ
แล้วทำการสร้างเป็น FileStream Object แล้วใช้ NMStrm1 ส่ง FileStream ไปยัง
Host ที่ได้กำหนดไว้
3. ขั้นตอนต่อมาจะเป็นส่วนของการรับไฟล์
โดยใช้ NMStrmServ ให้คุณทำการ Double Click ที่ช่อง Event OnSMG ของ คอนโทรล
NMStrmServ1 ดังรูปด้านล่าง
แล้วป้อนโค้ดดังต่อไปนี้
procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var MyFStream: TFileStream;
begin
if FileExists('.\tmp.bmp') then DeleteFile('.\tmp.bmp');
MyFStream :=TFileStream.Create('.\tmp.bmp',fmCreate);
try
MyFStream.CopyFrom(strm,strm.Size);
finally
MyFStream.Free;
end;
Image1.Picture.LoadFromFile('.\tmp.bmp');
end;
|
จากโค้ดในขั้นตอนที่ 3. นี้ จะเป็นส่วนของการับไฟล์ที่ส่งมา
โดยจะเริ่มต้นด้วยการตรวจสอบไฟล์เก่า(tmp.bmp) ว่ามีหรือไม่ ถ้ามีไฟล์นี้อยู่
ก็ให้ลบทิ้งไปก่อน ต่อจากนั้นจะทำการสร้างไฟล์ จาก FileStream ที่ได้รับ
เมื่อเสร็จสิ้นการสร้างไฟล์ เราจำทำการ Load รูปภาพขึ้นไปแสดง โดยใช้ Control
ที่ชื่อ Image1
ปิดท้าย
วิธีการส่งที่ผมเสนอเป็นตัวอย่างนี้ อาจนำไปดัดแปลงเพื่อส่งไฟล์อื่นๆ
ได้นะครับ เช่นหากใครต้องการเปลี่ยนจาก TNMStrm,TNMStrmServ มาเป็น TClientSocket
, TServerSocket ก็สามารถทำได้นะครับ โดยจะมีข้อดีและข้อเสียอยู่คือ มีความยุ่งยากมากกว่า
แต่คุณสามารถที่จะกำหนดรูปแบบการส่งของตัวเองได้ (อาจเรียกได้ว่าสร้าง protocol
ของตัวเองขึ้นมาเลย ) ครับแล้วพบกันใหม่ กับ 9'M :-P |