2016-02-09 51 views
0

尝试从Google Chrome执行HTTP GET请求时出现引渡问题。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中输入一次(如预期),但在Chrome浏览器上写入相同的url会导致调用该方法两次。

任何人都可以解释我这里有什么问题吗?提前致谢。

+1

我建议你看看收到的请求。我的猜测是,一个将是一个图标文件或类似的东西。 –

+0

我正在请求音频文件,例如“http:// ip:port/file.wav”。事实上,在Firefox中,我可以正确下载文件,并且在第一次调用下载文件,但第二次永久等待。不明白为什么它只在Chrome上调用两次。 – Alex

+2

其中一个连接可能能够并行请求'favico.ico'。查看传入请求的URL。无论哪种方式,HTTP客户端可以打开尽可能多的连接。 – jgauffin

回答

0

我建议进一步了解chrome的行为。这可以通过使用应用程序Fiddler来查看浏览器正在进行的网络请求。

您可能还需要禁用浏览器上的所有分机,因为这些也可能是发出请求。尝试使用单个选项卡的单个实例铬(这是一个远射,但只是为了消除任何无意中发生的行为的可能性)。