簡體   English   中英

使用networkstream和streamreader從網絡讀取流

[英]reading stream from network using networkstream and streamreader

  • 我正在嘗試使用NetworkStream和StreamReader的異步方法使用C#代碼連接到IRC服務器。
    • 似乎連接階段已成功完成,但是當我嘗試讀取數據時,它被卡住了。
    • 我正在逐行閱讀,直到達到reader.EndOfStream(也嘗試過reader.Peek()!= -1),但循環仍未結束...

這是我正在使用的代碼:

public class MainViewModel : ViewModelBase
{
    public string HostAddress { get; set; }
    public int Port { get; set; }

    public MainViewModel()
    {
        HostAddress = "amsterdam.nl.eu.undernet.org";
        Port = 6667;

        Connect(HostAddress);
    }

    private void Connect(string hostAddress)
    {
        var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        socket.BeginConnect(hostAddress, Port, ConnectCompleted, socket);
    }

    private async void ConnectCompleted(IAsyncResult ar)
    {
        var socket = (Socket)ar.AsyncState;
        socket.EndConnect(ar);

        var networkStream = new NetworkStream(socket);
        var reader = new StreamReader(networkStream, Encoding.UTF8);


        do
        {
            var line = await reader.ReadLineAsync();

            Console.WriteLine(line);

        } while (!reader.EndOfStream);

        // Not getting here

        await WriteAsync("NICK mickey", networkStream);
        await WriteAsync("USER mickey 8 * : realname", networkStream);

        do
        {
            var line = await reader.ReadLineAsync();

            Console.WriteLine(line);

        } while (!reader.EndOfStream);


        reader.Close();
        networkStream.Close();
        socket.Close();
    }



    private async Task WriteAsync(string message, NetworkStream stream)
    {
        var command = Encoding.UTF8.GetBytes(string.Format("{0}\r\n", message));

        Console.WriteLine("[S] {0}", message);

        await stream.WriteAsync(command, 0, command.Length);

        await stream.FlushAsync();

        Thread.Sleep(1000);
    }
}

問題出在ConnectCompleted()中的Do ... While循環中

到目前為止的輸出是:NOTICE AUTH: *查找您的主機名NOTICE AUTH: 檢查身份通知授權: 找到了您的主機名NOTICE AUTH:*無身份響應

  • 但是卡住了...請幫助我了解視頻流何時結束。

當遠程端關閉連接(或關閉發送)時,流結束。 我認為IRC協議不是這種情況。

無法找到當前是否沒有可用數據或遠端是否正在發送更多數據。 我想可能會隨時收到新的IRC消息。

因此,您必須停止基於數據的讀取。 也許有一些命令可以檢測到,告訴您繼續前進。

暫無
暫無

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

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