0

我已阅读有关 http 请求的文档并最终编写了此标头:

int *binary = new int[bufferLength]; // And fill it

std::stringstream out;
out << "POST /push1_pub?id=game HTTP/1.1\r\n";
out << "User-Agent: Lotosoft soccer client\r\n";
out << "Host: localhost\r\n";
out << "Accept: */*\r\n";
out << "Content-Type: application/octet-stream\r\n";
out << "Content-Length: " << bufferLength << "\r\n\r\n";

// Take out string from stream
std::string headers = out.str();
// Length of new array of bytes (headers + binary data + \0)
const int rawLen = headers.size() + bufferLength*sizeof(int) + 1;

char *raw = new char[rawLen];
// Copy headers data into bytes array
strcpy(raw, headers.c_str());
// Apply offset to bytes array and fill another part with binary array of ints
memcpy(raw+headers.size(), binary, bufferLength*sizeof(int));

std::cout << raw << std::endl;

// Send it to socket
if (socket.send(raw, rawLen) == -1)
{
    std::cout << "Failed to send headers\n";
}

发布请求发送成功,但我不确定将所有内容填充到字节数组中的想法是否一切正常。这是将二进制数据作为请求后正文传递的正确方法吗?

4

1 回答 1

1

问自己这个问题:“我发送到服务器的发布数据的第一个字节是什么?”。您是否看到您不知道 - 这是您的平台碰巧存储为数组的第一个字节的任何内容,这取决于您的特定 CPU 如何存储整数。

服务器不知道您的 CPU 是如何存储整数的,因此您正在向它发送信息,不可能有任何意义。您必须向服务器发送一个查询,该查询由服务器期望的任何格式的字节组成,而不是您的平台喜欢的任何服务器。

此外,您告诉服务器您将向它发送bufferLength字节,但随后您向它发送bufferLength*sizeof(int)字节。你必须保持一致。(假设您不在使用单字节整数的平台上。)

于 2012-04-15T06:30:38.193 回答