如何同时读取多个TCP(端口)?

时间:2011-10-08 21:12:03

标签: c# client client-server

是否可以同时读取多个(2个TCP端口)?

示例:

    public void getFeed()
    {
        while(true)
        {
            try 
            {
                if (!isReadableStream()) throw new Exception("not readable Stream");
                recieveMsg = streamReader.ReadLine();

                if(!String.IsNullOrEmpty(recieveMsg))
                {
                    displayConsole(recieveMsg, false);

                }
            }
            catch(Exception ex)
            {
                displayError(ex.Message);
            }
        }
    }

上面的函数读取1个端口,我想读取另一个端口,因为服务器每隔1-2秒从另一个服务器获取源。

1 个答案:

答案 0 :(得分:2)

您可以根据需要读取任意数量的端口,但需要使用异步读取。您当前正在使用同步(或“阻塞”)调用,这意味着您的代码会停止并等待数据到达一个端口,并且在读取时无法执行任何其他操作。

另一方面,

异步读取意味着当您调用Read方法时,它会启动读取操作并返回到立即执行代码。您的代码将继续运行,并且在将来的某个时间点(当某些数据可用时),将提供您提供的委托。然后结束读取操作以接收数据。

然后,您可以根据需要触发尽可能多的读取,然后关闭并执行您想要执行的任何操作(或坐在繁忙的等待循环中),直到结果重新出现。您只需要注意数据的位置来自于您可以跟踪进入您的应用程序的不同消息流。

阅读NetworkStream.BeginRead等异步流操作。

您可以通过搜索“C#TCPClient BeginRead”和类似查询轻松找到示例,例如

http://www.albahari.com/nutshell/ch20.aspx

NetworkStream BeginRead / EndRead

相关问题