2016-02-09 1 views
0

У меня проблема с расширением при попытке выполнить запрос HTTP GET из Google Chrome.C# TcpListener Проблема Chrome

У меня есть простой HTTPServer следующим образом:

public class HttpServer 
    { 

    #region Attributes ---------------------------------------------------- 

    protected Int32 Port; 
    private TcpListener listener; 
    private Boolean closed; 

    #endregion 

    #region Properties (Own Members) -------------------------------------- 

    internal String Folder { get; private set; } 

    #endregion 

    #region Constructors -------------------------------------------------- 

    #endregion 

    #region Methods (Own Members) ----------------------------------------- 

    public void Start(Int32 port, String folder) 
     { 
     if (!Directory.Exists(folder)) 
      throw new ArgumentException("folder"); 

     closed = false; 

     this.Folder = folder; 

     var ipLocal = IPAddress.Parse(NetUtils.GetLocalIPv4()); // My own stuff to get 
     this.Port = port; 

     listener = new TcpListener(ipLocal, Port); 
     listener.Start(); 

     StartAccept(); 
     } 

    public void Stop() 
     { 
     if (listener == null) return; 

     closed = true; 

     listener.Stop(); 
     listener = null; 
     } 

    private void AcceptCallback(IAsyncResult ar) 
     { 
     if (closed) { return; } 

     StartAccept(); 

     var client = listener.EndAcceptTcpClient(ar); 

     var processor = new HttpProcessor(client, this); 
     processor.Start(); 
     } 

    private void StartAccept() 
     { 
     listener.BeginAcceptTcpClient(AcceptCallback, listener); 
     } 

    #endregion 

    } 

HttpProcessor это класс, который управляет обменом данными между клиентом и сервером, и это не проблема.

Я настроить сервер в обычном режиме:

var httpServer = new HttpServer(); 
httpServer.Start(localPort, "somepath"); 

Здесь возникает проблема. Когда я пишу на Mozilla Firefox «http://localIpAddr:localPort/somepath/somefile», он входит в AcceptCallback один раз (как и ожидалось), но записывая тот же URL-адрес в результатах Google Chrome при вызове этого метода дважды.

Может кто-нибудь объяснить мне, в чем проблема здесь? Заранее спасибо.

+1

Предлагаю вам посмотреть полученные запросы. Я предполагаю, что один будет для файла значка или чего-то подобного. –

+0

Я запрашиваю аудиофайлы, например, «http: // ip: port/file.wav». На самом деле в Firefox я могу загрузить файл правильно, а в Chome первый вызов загружает файл, а второй ждет навсегда. не может понять, почему он называется дважды только в Chrome. – Alex

+2

Одна из подключений, вероятно, может запрашивать 'favico.ico' в параллельном режиме. Посмотрите URL-адреса для входящих запросов. В любом случае, клиент HTTP может открывать столько соединений, сколько им нравится. – jgauffin

ответ

0

Я бы посоветовал дополнительно изучить поведение хрома. Это можно сделать с помощью приложения Fiddler, чтобы посмотреть, какие веб-запросы выполняются браузером.

Вы также можете отключить все расширения в браузере, так как они также могут делать запросы. Попробуйте также использовать один экземпляр хрома с одной вкладкой (это длинный снимок, но просто для устранения любой возможности любого непреднамеренного действия).

Смежные вопросы