Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> http-ответы, почему-то не отображаются 
V
    Опции темы
sidslog
Дата 14.11.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 25.10.2006
Где: Москва

Репутация: нет
Всего: нет



Пишу сервер, который пока только принимает запросы и отсылает один и тот же ответ. Так вот отсылаться должна HTML-страница. Но в браузере она не отображается. Netscape пишет, что страница загружена, а Opera продолжает подключаться к серверу. Подскажите, где я ошибаюсь
Вот код
Код

// WebServerNew.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "WebServerNew.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#include "Server.h"
// The one and only application object
using namespace std;
std::vector<TClient> m_vClients;
SOCKET sock;
CWinApp theApp;
// Тестим на правильность
bool TestQuiry(char* str){
    return false;
}
DWORD WINAPI MakeReply(PVOID pParam){
    char* quiry=(char*)pParam;
    int bytesend;
    SOCKET ClientSocket=sock;
    if(!TestQuiry(quiry))//пока возвращает только false
    {
        cout<<"Cannot make a reply!!!"<<endl;
// Отсылаем ответ
        char reply[]=
"HTTP/1.1 200 OK\r\n"
"Transfer-Encoding: chunked\r\n"
"Cache-Control: no-cache, must-revalidate, max-age=0\r\n"
"Date: Tue, 07 Nov 2006 19:03:35 GMT\r\n"
"Content-Type: text/html; charset=windows-1251\r\n"
"\r\n"
"<html>\r\n"
"<title>test page</title>\r\n"
"<body><h1>This is test page</h1></body>\r\n"
"</html>";
        cout<<reply<<endl;
        bytesend = send(ClientSocket,reply,strlen(reply),0);
        closesocket(ClientSocket);
        return 0;
    }
//    proceed
    return 0;
}
//Принимаем новые подключения
void AcceptConnections(){

    WSADATA g_wsaData;
    SOCKET g_SSocket;                //сокет для прослушивания новых подключений
    SOCKADDR_IN g_addr;
    if (::WSAStartup(WINSOCK_VERSION, &g_wsaData)){
        cout<<"Error initialising winsock"<<endl;
        return;
    }
    g_SSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    if (g_SSocket == INVALID_SOCKET){
        cout<<"Error sreate socket"<<endl;
        return;
    }

    g_addr.sin_family = AF_INET;
    g_addr.sin_addr.s_addr = INADDR_ANY;
    g_addr.sin_port = htons(PORT_ADDR);
        
    bind(g_SSocket, (SOCKADDR*)&g_addr, sizeof(SOCKADDR));
        
    listen(g_SSocket, SOMAXCONN);
    while(1){
        DWORD dwID;
        //получаем новый запрос
        TClient NClient;
        NClient.iAddrLen=sizeof(SOCKADDR);
        SOCKADDR addr;
        int iAddrLen;
        NClient.hSocket = accept(g_SSocket, (SOCKADDR*)&NClient.addr, &NClient.iAddrLen);
        sock=NClient.hSocket;
        char* szBuf=new char[256];
        //принимаем от него запрос
        recv(NClient.hSocket, szBuf, 255, 0);
        cout<<szBuf<<endl;
        //создаем поток обработки ответа

        HANDLE hThread = CreateThread(NULL,256,MakeReply,(PVOID)&szBuf,0,&dwID);
    }
}




int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // TODO: change error code to suit your needs
        _tprintf(_T("Fatal Error: MFC initialization failed\n"));
        nRetCode = 1;
    }
    else
    {
        // TODO: code your application's behavior here.
    }
    AcceptConnections();
    return nRetCode;
}



PM MAIL ICQ GTalk   Вверх
ptr
Дата 14.11.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 9
Всего: 14



Выложи ещё WebServerNew.h и Server.h, чтобы можно было программу собрать.


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
sidslog
Дата 14.11.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 25.10.2006
Где: Москва

Репутация: нет
Всего: нет



А там только
Код

#define PORT_ADDR 80
#define WINSOCK_VERSION  0x0101

и структура, которая пока не особо нужна
Код

struct TClient{
    string szName;
    SOCKET hSocket;
    HANDLE hThread;
    string szIP;
    SOCKADDR_IN addr;
    BOOL bAccepted;
    int iAddrLen;
};


В webserverhew.h
Код

#pragma once

#include "resource.h"




Это сообщение отредактировал(а) sidslog - 14.11.2006, 13:37
PM MAIL ICQ GTalk   Вверх
ptr
Дата 14.11.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 9
Всего: 14



Убери из заголовка ответа "Transfer-Encoding: chunked\r\n".


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
sidslog
Дата 14.11.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 25.10.2006
Где: Москва

Репутация: нет
Всего: нет



Большое спасибо буду разбираться дальше.
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.2390 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.