C#TcpListener Chrome问题

时间:2016-02-09 11:18:55

标签: c# google-chrome tcplistener

尝试从Google Chrome执行HTTP GET请求时,我遇到了问题。

我有一个简单的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中输入一次(正如预期的那样),但在Google Chrome上写相同的网址会导致调用该方法两次。

有谁能解释一下这里的问题是什么?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我建议进一步研究chrome的行为。这可以使用应用程序Fiddler来完成,以查看浏览器正在进行的Web请求。

您可能还想禁用浏览器上的所有扩展程序,因为这些扩展程序也可能正在发出请求。尝试使用单个实例的单个选项卡(这是一个很长的镜头,但只是为了消除任何无意中发生的行为)。