使用套接字c ++正确发送和接收二进制文件

send and receive binary files properly using sockets c++

你好stackflow用户,

所以我想在 C++ 中使用套接字发送和接收我的二进制文件,这是我从服务器程序发送它的方式

send(Connections[conindex], reinterpret_cast<char*>(rawData), sizeof(rawData), NULL);

这是我的客户端程序接收它的方式

char raw[647680];
recv(Connection, raw, sizeof(raw), NULL);

还有比这更合适的方法吗?我想要这样我就不必每次都对大小进行硬编码。 或任何其他替代品等

一个相当通用的实现方式(在 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-esque 连接方式的替代方案包括首先发送文件的大小,因此客户端将知道何时停止侦听而不是等待断开连接。

请注意,此代码未经测试,仅用于说明概念。