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會導致調用該方法兩次。
任何人都可以解釋我這裏有什麼問題嗎?提前致謝。
我建議你看看收到的請求。我的猜測是,一個將是一個圖標文件或類似的東西。 –
我正在請求音頻文件,例如「http:// ip:port/file.wav」。事實上,在Firefox中,我可以正確下載文件,並且在第一次調用下載文件,但第二次永久等待。不明白爲什麼它只在Chrome上調用兩次。 – Alex
其中一個連接可能能夠並行請求'favico.ico'。查看傳入請求的URL。無論哪種方式,HTTP客戶端可以打開儘可能多的連接。 – jgauffin