从远程服务器接收数据
Receiving data from remote server
我在从远程服务器接收数据时遇到问题。似乎我可以向 http://www.google.com 等主机发送HTTP请求,但无法得到回复。我正在向主机发送格式如下的 HTTP 1.0 请求:
获取/HTTP/1.0
主持人:www.google.com
连接:关闭
以下是代理代码的一部分:
//Parse Request Buffer
HttpRequest req;
req.ParseRequest(request.c_str(), request.length());
//Format Data to be Sent:
req.AddHeader ("Connection", "close"); // add connection close headers
req.SetVersion ("1.0"); // set http 1.0 flag
char *requestBuf = new char [req.GetTotalLength()];
req.FormatRequest(requestBuf);
//Get host IP by name
struct hostent *host;
host = gethostbyname(req.GetHost().c_str());
//Setup remote address structure
struct sockaddr_in remoteAddr;
remoteAddr.sin_family = AF_INET;
remoteAddr.sin_port = htons(req.GetPort());
remoteAddr.sin_addr = *((struct in_addr *)host->h_addr);
//create new socket for remote server
int remoteSock = socket(AF_INET, SOCK_STREAM, 0);
if(remoteSock < 0)
{
perror("Socket Error");
//return -1;
}
//connecting to remote server
if(connect(remoteSock, (struct sockaddr *)&remoteAddr, sizeof(remoteAddr)) < 0)
{
perror("Connect Error");
//return -1;
}
cout.flush() << requestBuf << endl;
//send request to remote server
if(send(remoteSock, requestBuf, sizeof(requestBuf), 0) < 0)
{
perror("Write Error");
//return -1;
}
//receive reply from server
char *recBuf = new char [1024];
int bufSize = 1024;
int readSize;
while(1)
{
readSize = read(remoteSock, recBuf, bufSize); //Read from Remote Server
cout.flush() << recBuf << endl;
if(readSize <= 0) //If the requestBuf not filled, nothing left to send to client
break;
write(clientSock, recBuf, readSize); //write reply to Client
}
close(remoteSock);
recBuf 的 cout.flush() 不输出任何内容。
对发生了什么有什么想法吗?
在此代码中:
if(send(remoteSock, requestBuf, sizeof(requestBuf), 0) < 0)
您只向远程端发送(可能)4 或 8 个字节。 requestBuf
被声明为 char *
,这是一种指针类型。而不是 sizeof(requestBuf)
,您需要传递已构建的请求的实际长度,这在您的情况下似乎req.GetTotalLength()
。
相关文章:
- 将相机数据从服务器实时流式传输到客户端
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- Arduino UNO+SIM800L-向服务器发送数据
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- Java 客户端C++服务器数据发送/接收问题
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- 在 MySQL 中运行 HTTP 服务器以从客户端接收数据
- 使用 Broadcast 发出的从节点服务器发送的数据不能被 C++ 套接字 IO 客户端读取
- 如何使用 asio 本地数据报构建回显服务器和客户端?
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 如何使用gRPC在客户端和服务器之间双向发送和接收流元数据
- 通过TCP将数据从C++客户端发送到JSON服务器
- 如何使客户端在将数据写入 C++ 管道之前检查服务器是否完成了从管道的读取操作
- C++中从客户端到服务器的数据传输问题
- Qt TCP服务器不从客户端读取数据
- 如何使用 C++ 中的 cpprestsdk 发布 json 数据并从本地服务器获取响应