簡體   English   中英

TcpListener間歇性地無法正常工作

[英]TcpListener intermittently not working

嘗試編寫基本代理我已經按照以下幾行實現了代碼作為開始。

private Thread _proxyThread;

public void Start() 
{
    this._proxyThread = new Thread(StartListener);
    this._proxyThread.Start();
}

protected void StartListener(object data)
{
    this._listener = new TcpListener(IPAddress.Any, 1234);
    this._listener.Start();

    while (true)
    {
        TcpClient client = this._listener.AcceptTcpClient();

        while (client.Connected)
        {
            NetworkStream stream = client.GetStream();

            StringBuilder request = new StringBuilder();

            byte[] bytes = new byte[1024];

            while (stream.DataAvailable && stream.CanRead)
            {   
                int i = stream.Read(bytes, 0, bytes.Length);
                request.Append(System.Text.Encoding.ASCII.GetString(bytes, 0, i));                        
            }

            if (stream.CanWrite)
            {
                byte[] response = System.Text.Encoding.Default.GetBytes("HTTP/1.1 200 OK" + Environment.NewLine + "Content-length: 4\r\n\r\n" + "Test");
                stream.Write(response, 0, response.Length);
            }

            client.Close();
        }
    }
}

然后我像這樣設置我的LAN代理

代理

我目前的目標(因為你可以從我的代碼中推斷出來)是只返回一個沒有標題或任何內容的文本值。

我遇到的問題是,我嘗試運行代碼的任何嘗試都會導致間歇性行為,Chrome和IE9通常只返回ERR_CONNECTION_ABORTED,或者Internet Explorer無法分別顯示網頁 ,偶爾會顯示預期的輸出“測試”。

我最初嘗試使用異步方法(使用BeginAcceptTcpClient()),但已經恢復到這種更簡單的技術,因為我認為這個問題可能源於我在異步實現中做錯了但似乎原因是別的。

有人可以提供任何指導嗎?

在第一次循環迭代后while (client.Connected)您關閉連接。 只有在完成傳輸所有數據后才關閉它。

它不是同步還是異步,你只是沒有用正確的HTTP響應做出響應。 使用像Fiddler這樣的工具,查看您請求常規網頁時收到的數據。

如果你返回這個,它應該工作:

HTTP/1.1 200 OK
Content-length: 4

TEST

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM