如何使用Win7应用程序与网站进行通信
How do I get a Win7 app to communicate with a website?
我徒劳地找了一本名为《傻瓜的网站交流》的书。有人能给我推荐一些好的阅读材料/教程吗?
这就是我现在的处境:我有一个32位的Windows应用程序,我是用Visual Studio 2010 C++Express用C++编写的。该应用程序便于用户选择文本格式==的URL,即www.maps.google.com,然后创建一个套接字并连接它,等等。问题是我可以使用"send"命令,但没有错误,但我不知道在第二个参数中发送什么内容,这是一个const char[]。
我为各种网站尝试过简单的命令,如"dump"answers"refresh",但recv()函数在长时间延迟后仅返回0(已接收字节)。
感谢您的关注。
要了解web服务器和客户端之间来回传输的数据类型,请查看RFC(或从教程开始)。
当您了解了协议并使用了原始套接字时,请查找C或C++实现。libcurl就是其中之一。我还认为Windows在Windows SDK中内置了对HTTP客户端的支持。
您可能想要发送类似的东西
GET / HTTP/1.1
以获得正确的http响应。但是,大多数站点将忽略不包括某些HTTP头(例如Host)的请求。我建议在C++中查找http客户端库,为您做一些繁重的工作,编写自己的http请求构建代码在很大程度上是在重新发明轮子。
首先使用send
(GET / HTTP/1.1..
)向Web服务器发出请求,然后使用recv(Socket,buffer..)
将网站HTML代码下载到缓冲区中。
send(Socket,"GET / HTTP/1.1rnHost: www.google.comrnConnection: closernrn", strlen("GET / HTTP/1.1rnHost: www.google.comrnConnection: closernrn"),0);
Winsock代码:
#include <winsock2.h>
#include <windows.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main (){
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {
cout << "WSAStartup failed.n";
system("pause");
return 1;
}
SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
struct hostent *host;
host = gethostbyname("www.google.com");
SOCKADDR_IN SockAddr;
SockAddr.sin_port=htons(80);
SockAddr.sin_family=AF_INET;
SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
cout << "Connecting...n";
if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0){
cout << "Could not connect";
system("pause");
return 1;
}
cout << "Connected.n";
send(Socket,"GET / HTTP/1.1rnHost: www.google.comrnConnection: closernrn", strlen("GET / HTTP/1.1rnHost: www.google.comrnConnection: closernrn"),0);
char buffer[10000];
int nDataLength;
while ((nDataLength = recv(Socket,buffer,10000,0)) > 0){
int i = 0;
while (buffer[i] >= 32 || buffer[i] == 'n' || buffer[i] == 'r') {
cout << buffer[i];
i += 1;
}
}
closesocket(Socket);
WSACleanup();
system("pause");
return 0;
}
相关文章:
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 如何使用url确定网站协议
- 混淆了如何使用IDL与Ethovision进行通信
- C++ Boost::asio串行通信与Arduino无法写入
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- 通过TCP的PvP通信问题
- C++一个线程如何正确通信其任务已完成?
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 如何从网站获取数据并将其传输到数据库?
- 删除功能不适用于串行通信后多个循环中的多个实例
- 网站和C++程序在同一台 Linux PC 上的通信
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 使用 pybind11 共享 MPI 通信器
- 进程间通信堆内存
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- C++ 两台不同机器之间通过wifi进行套接字通信
- 提升::Asio 异步聊天客户端停止与服务器通信
- php和C++可以在同一台服务器上运行并在网站上进行通信
- 如何使用Win7应用程序与网站进行通信