c++ - 将 "binary string"转换为 "const char*"以发送(网络服务器)

标签 c++ http binary

我想用函数send()发送二进制数据

功能:

void ssend(const char* data){
    send(socket_fd, data, strlen(data), 0);
}

bool readFile(const char* path){
    std::ifstream ifile(path);
    if(ifile){
        if(!ifile.is_open()){
            ErrorPage("403");
            return true;
        }
        std::string sLine;

        std::string Header = "HTTP/1.1 200 OK\nConnection: Keep-Alive\nKeep-Alive: timeout=5, max=100\nServer: BrcontainerSimpleServer/0.0.1 (Win32) (Whitout Compiler code)\n\n";
        ssend(Header.c_str());

        while(!ifile.eof()){
            getline(ifile, sLine);
            cout << "String: " << sLine << endl;
            cout << "const char*: " << sLine.c_str() << endl;

            ssend(sLine.c_str());
        }
        return true;
    }
    return false;
}

测试:

...
while (1) {
    socket_fd = accept(listen_fd, (struct sockaddr *)&client_addr,&client_addr_length);
    readFile( httpPath );
    recv(socket_fd, request, 32768, 0);
    closesocket(socket_fd);
}
...

当使用.c_str() 转换为二进制字符串 时,数据会消失。如何解决这个问题?

如何使用函数send()发送二进制数据

最佳答案

在 C 和 C++ 中,字符串以零值字符 ('\0') 结束。因此,当您说“二进制字符串”时,您是在混合一些不相干的东西,因为二进制数据与字符串不同。

不使用字符串,而是使用 BYTE 数组并将长度作为附加参数传递,以便您知道要发送多少字节。

一旦遇到字符串终止符,您对 strlen() 的使用将停止计数。

关于c++ - 将 "binary string"转换为 "const char*"以发送(网络服务器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14131231/

相关文章:

javascript - 请求模块 node.js : How add query to GET request?

mysql - 如何在MySQL中存储二进制数据

c++ - 专门化嵌套模板

c++改变空间进入

iPhone - 从网络服务器获取文件的最后修改日期

json - 使用REST分页资源的正确方法是什么

c - 在系统之间传输二进制文件

python - 在python中读取二进制大端文件

c++ - 我是线程的新手,这个编译错误是什么意思?

c++ - Visual Studio 2015 使用较旧的 dll 进行调试