Запись в сокет C # - PullRequest
       18

Запись в сокет C #

0 голосов
/ 15 марта 2012

Я пишу сервер, который прослушивает на конкретном порту запрос от браузера, например http://23.10.222.151:20000/mac=0080440EEE71. Я получаю сокет браузера и затем проверяю его запрос, в данном случае mac=2280440FFF23. Я вижу, подключено ли это устройство, и если нет, я хочу отобразить страницу с надписью "Устройство: {0} НЕ зарегистрирован на сервере! Пожалуйста, подождите ..."

TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Connection Accepted from " + client.Client.RemoteEndPoint);

NetworkStream ClientStream = client.GetStream();

if( !devDictionary.isDevicePresent(mac))    
{
    Thread onRequestThread = new Thread(new ParameterizedThreadStart(OnRequesstHandler));
    onRequestThread.Start(new OnRequestHandlerObject(mac, ClientStream));

    String notfound = String.Format("<html><body><h1>Device: {0} has NOT registered with the Server! Please wait...</h1></body></html>", mac);
    byte[] response = encoder.GetBytes(notfound);
    ClientStream.Write(response, 0, response.Length);
}

Поток продолжает проверять, подключено ли устройство. Если да, то он показывает это используя тот же ClientStream. Но страница отображается не сразу. Он продолжает цикл, и когда устройство подключается, он показывает обе страницы в быстрой последовательности. Как мне сразу отобразить первую страницу?

1 Ответ

0 голосов
/ 15 марта 2012

HTTP является вовлеченным протоколом.Вы не просто отправляете контент HTML клиенту, но сначала должны отправить заголовок сообщения.

Начните с чего-то готового, а не с пустых сокетов.Взгляните, например, здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...