我必须在我的网络服务器中读取二进制文件并通过TCP将其发送到客户端.我决定用大块阅读它.我该怎么做?
我的fgets代码只适用于文本文件(代码,省略了检查返回值):
char buf[2048]; fgets(buf, sizeof(buf), fp); while (!feof(fp)) { Server_TCP_Send(socket, buf, strlen(buf)); fgets(buf, sizeof(buf), fp); } fclose(fp);
Remy Lebeau.. 6
使用fread()
而不是fgets()
,并注意返回值:
char buf[2048]; size_t buflen; while (1) { buflen = fread(buf, 1, sizeof(buf), fp); if (buflen < 1) { if (!feof(fp)) { // a read error occured... } break; } Server_TCP_Send(socket, buf, buflen); } fclose(fp);
或者,某些平台具有通过套接字发送文件的功能.例如,sendfile()
在Linux或TransmitFile()
Windows上.
使用fread()
而不是fgets()
,并注意返回值:
char buf[2048]; size_t buflen; while (1) { buflen = fread(buf, 1, sizeof(buf), fp); if (buflen < 1) { if (!feof(fp)) { // a read error occured... } break; } Server_TCP_Send(socket, buf, buflen); } fclose(fp);
或者,某些平台具有通过套接字发送文件的功能.例如,sendfile()
在Linux或TransmitFile()
Windows上.