gpt4 book ai didi

c - 如何使用c在winsock2中发送图像

转载 作者:行者123 更新时间:2023-11-30 14:29:00 25 4
gpt4 key购买 nike

我正在用 c (winsock2) 编写一个非常简单的网络服务器。

我能够返回 html 页面的内容。

目前,我正在做的是将文件的内容写入 char* 缓冲区并使用“send()”发送

尽管当我尝试读取图像(jpg、bmp)时,我无法将字符写入缓冲区,因为某些字符为“空”(0)。

如何发送整个图像文件?

谢谢。

最佳答案

您可以将空字符存储在 char* 缓冲区中。您只需使用计数器来记住写入了多少个字符,而不是通过计算非空字符的数量来重新计算它(这可以是整数,也可以是指向缓冲区中下一个插入点的指针)。

要发送文件,您需要执行以下操作:

int sendFile(int sock, const char* filename) {
FILE* file = fopen(filename, "rb");
if (file == NULL)
return -1;

if (fseek(file, 0, SEEK_END) != 0) {
fclose(file);
return -1;
}

off_t size = ftello(file);
if (fseek(file, 0, SEEK_SET) != 0) {
fclose(file);
return -1;
}

if (SendBinaryFileHeaderAndSize(sock, size) < 0) {
fclose(file);
return -1;
}

char buffer[4096];
for (;;) {
size_t read = fread(buffer, 1, sizeof(buffer), file);
if (read == 0) {
int retcode = 0;
if (ferror(file))
retcode = -1;
fclose(file);
return retcode;
}

for (size_t sent = 0; sent < read;) {
int ret = send(sock, buffer + sent, read - sent, 0);
if (ret < 0) {
fclose(file);
return -1;
}

assert(ret <= read - sent);
sent += ret;
}
}
}

关于c - 如何使用c在winsock2中发送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5327133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com