阻塞式 TCP 連線,伺服端主動發送整個檔案,客戶端接收存檔。不適用大檔案(記憶體一次讀取全檔)。
void SendFile() {
AfxSocketInit(nullptr);
CSocket srvSock, cliSock;
srvSock.Create(34000);
srvSock.Listen();
srvSock.Accept(cliSock); // 阻塞等待連線
CFile file(L"C:\\ANYFILE.EXE", CFile::modeRead | CFile::typeBinary);
int len = file.GetLength();
cliSock.Send(&len, 4); // 先傳 4 位元組檔案長度
BYTE* buf = new BYTE[len];
file.Read(buf, len);
cliSock.Send(buf, len); // 傳送檔案內容
delete[] buf;
file.Close();
cliSock.Close();
}
void GetFile() {
AfxSocketInit(nullptr);
CSocket cliSock;
cliSock.Create();
cliSock.Connect(L"127.0.0.1", 34000);
int len;
cliSock.Receive(&len, 4); // 讀取檔案長度
BYTE* buf = new BYTE[len];
cliSock.Receive(buf, len); // 接收檔案內容
CFile file(L"C:\\temp\\ANYFILE.EXE",
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
file.Write(buf, len);
delete[] buf;
file.Close();
cliSock.Close();
}
SEEK、RESUME 指令CAsyncSocket 或執行緒池本範例適合教學、小型設定檔/腳本傳輸等輕量場景。