Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Косяки с сокетами и непонятки с пониманием http-запросов |

28.06.2006, 00:53
|
|
Постоянный
Регистрация: 14.05.2006
Сообщений: 334
Провел на форуме: 1543521
Репутация:
272
|
|
Косяки с сокетами и непонятки с пониманием http-запросов
Косяки с сокетами и непонятки с пониманием http-запросов
Я пытаюсь выучить winsock. Почти получается, но появилась проблема. У меня стоит апач и я подключаюсь программой которую написал на с++ к нему, т.е. к 127.0.0.1 на 80 порт. Затем делаю GET запрос на получение главной страницы, но в ответ не получаю вообще ничего. Я сначала думал, что проблема в моем запросе, но потом поставил тот же запрос в программу на php (идентичную) и апач вернул сообщение bad request. Мои косяки в запросе подтвердились, но ведь и программа на c++ тогда должна была вернуть это сообщение с “bad request”. А она вообще ничего не вернула. Вот у меня два вопроса.
1) как должен выглядеть минимальный GET запрос? Мой запрос вы увидите дальше по тексту в исходниках программ.
2) почему программа на с++ не получает ответа от сервера.?
Вот исходники тех программ:
C++:
Код:
#include <stdio.h>
#include <winsock.h>
#include <windows.h>
int main()
{
WSADATA wsadata;
int s,char_len;
LPSTR str;
struct sockaddr_in addr_c,addr_s;
WSAStartup(MAKEWORD(2,0),&wsadata);
s=socket(AF_INET,SOCK_STREAM,0);
memset((char *)&addr_c,0,sizeof(addr_c));
addr_c.sin_family=AF_INET;
addr_c.sin_port=80;
addr_c.sin_addr.s_addr=INADDR_ANY;
bind(s,(struct sockaddr *)&addr_c,sizeof(addr_c));
memset((char *)&addr_s,0,sizeof(addr_s));
addr_s.sin_family=AF_INET;
addr_s.sin_port=80;
addr_s.sin_addr.s_addr=inet_addr("127.0.0.1");
if(connect(s,(struct sockaddr *)&addr_s,sizeof(addr_s))==-1)puts("connect error");
str=(LPSTR)GlobalAlloc(GHND,0);
str="GET index.html HTTP/1.1\r\n\r\n";
send(s,str,100,0);
char_len=recv(s,str,1000,0);
puts(str);
puts("end...");
return 0;
}
php:
Код:
<?php
$tosend="GET index.html HTTP/1.1\r\n\r\n ";
echo $tosend."<br>";
$s=fsockopen("127.0.0.1",80);
if($s)
{
fwrite($s,$tosend);
$tosend=fread($s,1000);
echo $tosend;
}
?>
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|