{
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");
SOCKET m_socket;
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if ( m_socket == INVALID_SOCKET ) {
Label1->Caption="Error at socket(): %ld\n"+WSAGetLastError();
WSACleanup();
return;
}
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr( "127.0.0.1" );
service.sin_port = htons( 80 );
if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) {
Label1->Caption="bind() failed.";
closesocket(m_socket);
return;
}
if ( listen( m_socket, 1 ) == SOCKET_ERROR )
Label1->Caption="Error listening on socket.";
SOCKET AcceptSocket;
Label1->Caption="Waiting for a client to connect...";
while (1)
{
AcceptSocket = SOCKET_ERROR;
while ( AcceptSocket == SOCKET_ERROR )
{
AcceptSocket = accept( m_socket, NULL, NULL );
}
Label1->Caption="Client Connected.";
m_socket = AcceptSocket;
break;
}
char sendbuf[1000] ="200\r\n";
send( m_socket, sendbuf, strlen(sendbuf), 0 );
}
HTTP Server
спасибо
ПС желательно с уклоном на программирование в Builder 5
Цитата:
On 2001-11-20 1947, Fly wrote
Привет. Кто писал такие вещи как http сервера помогите советом/документацией/исходниками как это делается.
спасибо
ПС желательно с уклоном на программирование в Builder 5
Здесь есть немного устаревшая, но ещё вполне годная спецификация RFC 2068 на русском языке.
спасибо за совет посмотрю
Хотя, конечно, если тебе нужен полнофункциональный сервер, ну тогда, конечно, надо сидеть читать.
Цитата:
On 2001-11-21 2156, Fantasist wrote
Я писал. Если ты хочешь сделать довольно простой сервер, то изучать всю спецификацию ....
Нужен простой сервер... задача= вывод информации из БД в шаблонную html форму
HTTP/1.0 200
Last-Modified: Mon, 26 Nov 2001 19:52:20 GMT
Expires: Wed, 28 Nov 2001 15:18:45 GMT
Content-Type: text/html; charset=koi8-r
Server: chat server
Connection: close
<HTML>
<HEAD>
<TITLE>....</TITLE>
.
.
</HEAD>
<BODY>
..
..
..
</BODY>
</HTML>
Ну понятно где тут заголовок, а где тело (не забудь пустую строку после заголовка, это важно). Поля заголовка можно подредактировать(там Expires, charset). Заголовок, в принципе, может содержать вообще только одну строку: "Content-Type: text/html" . Ну вот, формируешь, значит, такой текст, и передаешь его как ответ. Передавать это дело можно цельным куском. Да, и не забывай закрывать соеденение после отсылки ответа, чтоб браузер понял, что это конец. (иначе надо использовать "Content-length")
Ну а вот так, например, может выглядеть запрос (это тот, которым я пользовался):
'GET /doc1.htm HTTP/1.1'+#$D#$A+
'Accept: application/vnd.ms-excel, application/msword, */*'+#$D#$A+
'Accept-Language: en-us'+#$D#$A+
'Accept-Encoding: gzip, deflate'+#$D#$A+
'User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)'+#$D#$A+
'Host: vingrad.com'+#$D#$A+
'Connection: Keep-Alive'+#$D#$A+#$D#$A;
По большому счету, роль играет только первая строчка: 'GET /doc1.htm HTTP/1.1'. После "GET" написан путь к запрашиваему документу.
Иногда вместо "GET" там может быть "POST", но, если ты не собираешся получть какие-нибудь данные от клиента, то это не имеет значения.
спасибо.
после запуска сервера и коннекта браузер показывает что он еще чего-то ждет...
вопрос как мне сделать так чтобы при входе на 127.0.0.1 в браузере появляласть строчка-"test"?
Код: