จบ;
จบ;
cs.OnRead (ผู้ส่ง: TObject; ซ็อกเก็ต: TCustomWinSocket);
var
sTemp:สตริง;
bufSend:ตัวชี้;
เริ่ม
sRecv:=Socket.ReceiveText;
กรณี sRecv[1] ของ
MP_REFUSE:ShowMessage('เป็นลม ถูกปฏิเสธ!');
MP_ACCEPT:เริ่มต้น
fsSend:=TFileStream.Create(OpenDialog1.FileName,fmOpen);
//iBYTEPERSEND เป็นค่าคงที่ ซึ่งเป็นขนาดของแพ็กเก็ตที่ส่งในแต่ละครั้ง
Socket.SendText(MP_FILEPROPERTY+Trunc(fsSend.Size/iBYTEPERSEND)+1);
จบ;
MP_NEXTWILLBEDATA:เริ่มต้น
ซ็อกเก็ต SendText (MP_NEXTWILLBEDATA);
จบ;
MP_DATA:เริ่มต้น
พยายาม
GetMem(bufSend,iBYTEPERSEND+1);
ถ้า (fsSend.Position+1+iBYTEPERSEND) < fsSend.Size แล้ว
เริ่ม
fsSend.Read(bufSend^,iBYTEPERSEND);
ซ็อกเก็ต SendBuf (bufSend ^, iBYTEPERSEND);
fsSend ฟรี;
end//ส่งธรรมดา ขนาด iBYTEPERSEND
เริ่มอย่างอื่น
fsSend.Read(bufSend^,fsSend.Size-fsSend.Position-1);
Socket.SendBuf(bufSend^,fsSend.Size-fsSend.ตำแหน่ง-1);
end;//ส่งครั้งสุดท้ายให้ส่งข้อมูลที่เหลือ
ในที่สุด
FreeMem(bufSend,iBYTEPERSEND+1);
สิ้นสุด;{ของความพยายาม}
จบ;
MP_ABORT:เริ่มต้น
//ยกเลิก :(
fsSend ฟรี;
จบ;
สิ้นสุด;{ของกรณี}
จบ;
ขั้นตอนการจัด:
เพิ่มการตัดสินข้อผิดพลาด, ปรับโปรแกรมให้เหมาะสม, รวมเซิร์ฟเวอร์และไคลเอนต์, เพิ่มการแสดงความคืบหน้าเวลาที่เหลือ, ทำให้สามารถถ่ายโอนไฟล์หลายไฟล์ในคราวเดียว, และเพิ่มฟังก์ชั่นแชทและกลายเป็นการถ่ายโอนไฟล์แบบจุดต่อจุดที่ดี โปรแกรม