你好 stackflow 用戶,
所以我想使用 c 中的套接字發送和接收我的二進制檔案,這是我從服務器程式發送它的方式
send(Connections[conindex], reinterpret_cast<char*>(rawData), sizeof(rawData), NULL);
這是我的客戶端程式接收它的方式
char raw[647680];
recv(Connection, raw, sizeof(raw), NULL);
還有比這更合適的方法嗎?我想要這樣我就不必每次都硬編碼大小。或任何其他替代品等
uj5u.com熱心網友回復:
實作此目的的一種相當通用的方法(在 C 和 C 中)是這樣的:
if (FILE *fp = fopen(filename, "rb"))
{
size_t readBytes;
char buffer[4096];
while ((readBytes = fread(buffer, 1, sizeof(buffer), fp) > 0)
{
if (send(Connections[conindex], buffer, readBytes, 0) != readBytes)
{
handleErrors();
break;
}
}
close(Connections[conindex]);
}
在客戶端:
if (FILE *fp = fopen(filename, "wb"))
{
size_t readBytes;
char buffer[4096];
while ((readBytes = recv(socket, buffer, sizeof(buffer), 0) > 0)
{
if (fwrite(buffer, 1, readBytes, fp) != readBytes)
{
handleErrors();
break;
}
}
}
這種類似 FTP 的連接方式的替代方案包括首先發送檔案的大小,因此客戶端將知道何時停止偵聽而不是等待斷開連接。
請注意,此代碼未經測驗,僅用于說明概念。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427545.html
