SOCKET傳輸資料 檔案

2021-05-24 22:16:39 字數 2606 閱讀 7225

/** 

* 函式:xsenddata

* 描述:傳送資料

* 引數:sock socket

* lpszbuff 緩衝區

* ndatasize 資料長度

* npacketsize 每次傳輸的資料塊長度

* novertime 超時 (秒)

* 返回:實際傳輸的資料長度

*/int xsenddata(socket sock, lpstr lpszbuff, int ndatasize, int npacketsize, int novertime)

else if (nsending > npacketsize)

// 判斷是否超時

if((int)(gettickcount() - dwstart) > 1000 * novertime)

nret = send(sock, lpszbuff + nsent, nsending, 0);

if (nret == socket_error)

nsent += nret; }

return nsent;

}/**

* 函式:xrecvdata

* 描述:接收資料

* 引數:sock socket

* lpszbuff 緩衝區

* ndatasize 資料長度

* npacketsize 每次傳輸的資料塊長度

* novertime 超時 (秒)

* 返回:實際傳輸的資料長度

*/int xrecvdata(socket sock, lpstr lpszbuff, int ndatasize, int npacketsize, int novertime)

else if (nrecving > npacketsize)

// 判斷是否超時

if((int)(gettickcount() - dwstart) > 1000 * novertime)

nret = recv(sock, lpszbuff + nrecved, nrecving, 0);

if (nret == socket_error)

nrecved += nret; }

return nrecved;

}/**

* 函式:xsendfile

* 描述:傳送檔案

* 引數:sock socket

* lpszfile 檔案路徑

* dwfilesize 檔案長度

* nbuffsize 緩衝區長度

* 返回:檔案長度

*/int xsendfile(socket sock, lpctstr lpszfile, dword dwfilesize, int nbuffsize)

// 讀取檔案內容並傳送資料

dword dwsent = 0;

int nsending, nret;

char *lpszsend = new char[nbuffsize];

if (lpszsend == null)

while (dwsent < dwfilesize)

else if (nsending > nbuffsize)

memset(lpszsend, 0x00, nbuffsize);

file.read(lpszsend, nsending);

nret = xsenddata(sock, lpszsend, nsending, 1024, 1);

if (nret == nsending)

else

} // 關閉檔案控制代碼

file.close();

delete lpszsend;

return dwsent;

}/**

* 函式:xrecvfile

* 描述:接收檔案

* 引數:sock socket

* lpszfile 檔案路徑

* dwfilesize 檔案長度

* nbuffsize 緩衝區大小

* 返回:檔案長度

*/int xrecvfile(socket sock, lpctstr lpszfile, dword dwfilesize, int nbuffsize)

dword dwrecvd = 0;

int nrecving, nret;

char *lpszrecv = new char[nbuffsize];

if (lpszrecv == null)

while (dwrecvd < dwfilesize)

else if (nrecving > nbuffsize)

memset(lpszrecv, 0x00, nbuffsize);

nret = xrecvdata(sock, lpszrecv, nrecving, 1024, 30);

if (nret == nrecving)

else

}// 關閉檔案控制代碼

file.close();

delete lpszrecv;

return dwrecvd;

}

socket 傳輸檔案

在兩台計算機傳輸檔案之前,必需得先有一台計算機建立套節子連線並繫結乙個固定得埠,並在這個埠偵聽另外一台計算機的連線請求。socket new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp socket.blo...

socket 傳輸檔案

在兩台計算機傳輸檔案之前,必需得先有一台計算機建立套節子連線並繫結乙個固定得埠,並在這個埠偵聽另外一台計算機的連線請求。socket new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp socket.blo...

Socket傳輸檔案示例

socket傳輸檔案示例 1 顯示檔案進度 2 可以隨時終止傳輸過程 傳送資料執行緒 uint senddatathread lpvoid lpparam 接收資料執行緒 uint receivedatathread lpvoid lpparam 傳送資料按鈕訊息響應函式 void ctzg004d...