Задать вопрос
mercy_smile
@mercy_smile

Какая ошибка в коде?

WSADATA wsa;

	std::string domin;
	int status;

	struct addrinfo hints = { 0 }, * res, * p;
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	
	SetConsoleCP(GetACP());
	SetConsoleOutputCP(GetACP());

	if (status = WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
		std::cout << "Error: of WSAStatus: " << gai_strerror(status) << std::endl;
		return status;
	}

	std::cout << "Enter domin: " << std::endl;
	std::getline(std::cin, domin);

	if (status = getaddrinfo(domin.c_str(), "80", &hints, &res) != 0) {
		std::cout << ("Error: of getaddrinfo", gai_strerror(status));
		return status;
	};

	std::string buffhost = "HTTP/1.0\r\nHost: ";
	std::string content = "Content-Type: application/x-www-form-urlencoded\r\nContent-Length:\r\n\r\n";

	std::string fine = {0};
	char sendbuf[1024];
	
	if (1) {
		buffhost = buffhost + domin + "\r\n";
		fine = buffhost + content;
		memcpy(sendbuf, fine.c_str(), 1024);
		std::cout << fine << std::endl;
	};

	char ipstr[1024]; 
	int s;

	char bufrecv[2048];

	for (p = res; p != NULL; p = p->ai_next) {
		const char* ipver;
		void* addr;
		if (p->ai_family == AF_INET) {
			struct sockaddr_in* ipv4 = (struct sockaddr_in*)p->ai_addr;
			addr = &(ipv4->sin_addr);
			ipver = "IPv4: ";
		}
		else {
			struct sockaddr_in6* ipv6 = (struct sockaddr_in6*)p->ai_addr;
			addr = &(ipv6->sin6_addr);
			ipver = "IPv6: ";
		}

		inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
		std::cout << "addres: " << ipver << ipstr << std::endl;

		if (((s = socket(p->ai_family, p->ai_socktype, p->ai_protocol))) == INVALID_SOCKET) {
			std::cout << "error of socket: " << WSAGetLastError() << std::endl;
			continue;
		}

		if ((connect(s, p->ai_addr, p->ai_addrlen)) == INVALID_SOCKET) {
			std::cout << "Error of connect: " << WSAGetLastError() << std::endl;
			continue;
		}

		send(s, sendbuf, sizeof(sendbuf), 0);
		
		if (recv(s, bufrecv, sizeof(bufrecv), 0) == NULL) {
			std::cout << " recv " << WSAGetLastError() << std::endl;
		}
	};

	freeaddrinfo(res);
	WSACleanup();
	system("pause");
	return 0;
}

я отправляю http запрос на сервер но в recv ничего не приходит.
  • Вопрос задан
  • 106 просмотров
Подписаться 1 Простой 3 комментария
Решение пользователя galaxy К ответам на вопрос (2)
@galaxy
А что вы шлете на сервер, не пробовали задуматься?
Если проследить:
HTTP/1.0
Host: domain.com
Content-Type: application/x-www-form-urlencoded
Content-Length:

Первая строчка не смущает? А Content-Length?

Ну и send(s, sendbuf, sizeof(sendbuf), 0); - почему sizeof? 1024 байта с кучей 0x00 хотите послать несчастному серверу?
Ответ написан