【问题标题】:How to read multiple TCP(ports) at same time?如何同时读取多个 TCP(端口)?
【发布时间】:2011-10-08 21:12:02
【问题描述】:

是否可以同时读取多个(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 秒就会从另一个服务器获取提要。

【问题讨论】:

  • 在不同的线程中做同样的事情
  • @Mimisbrunnr 你能举个例子让它更容易理解吗?谢谢!

标签: c# client client-server


【解决方案1】:

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

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

然后,您可以根据需要触发尽可能多的读取,然后继续执行您想做的任何其他事情(或坐在繁忙的等待循环中),直到结果返回。您只需要注意数据的位置来自,以便您跟踪进入您的应用程序的不同消息流。

阅读像NetworkStream.BeginRead这样的异步流操作。

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

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

NetworkStream BeginRead / EndRead

【讨论】:

  • 谢谢你,这对我帮助很大!
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多