【问题标题】:C# Asynchronous ReceiveC# 异步接收
【发布时间】:2012-01-11 03:33:40
【问题描述】:

我最近在尝试学习如何使用 Visual C# 进行异步接收时遇到了一些麻烦。我有一个基于控制台的服务器程序,它从客户端接收数据,然后将其发回。我的问题在客户端。它必须每 100 毫秒左右向服务器发送一次数据,然后再接收。

问题是恢复它,因为我不能让程序停止并等待数据。这是到目前为止的样子...

IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 16487);
TcpClient client = new TcpClient();

bool blnOnOFF;

private void SendServerData()
{
    string strData = "TEST DATA";

    NetworkStream clientStream = client.GetStream();

    ASCIIEncoding encoder = new ASCIIEncoding();
    byte[] buffer = encoder.GetBytes(strData);

    clientStream.Write(buffer, 0, buffer.Length);
    clientStream.Flush();
}

// Ticks Every 100ms
private void tmrDataTransfer_Tick(object sender, EventArgs e)
{
    SendServerData();
}
private void btnStart(object sender, EventArgs e)
{
    if (blnOnOFF == false)
    {
        tmrDataTransfer.Start();
        blnOnOFF = true;
    }
    else
    {
        tmrDataTransfer.Stop();
        blnOnOFF = false;
    }
}

如您所见,它现在所做的只是发送“测试数据”。如果有另一种接收数据的方式比异步更简单,请告诉我,我也想学习如何为未来的项目执行此操作。

先谢谢了。

编辑:添加客户对不起我忘了它

【问题讨论】:

  • 什么是client?您的代码不完整。
  • TcpClient 客户端 = new TcpClient();

标签: c# sockets asynchronous client


【解决方案1】:

好的,所以,您需要做的是,当您的应用等待传入数据时,您需要使用TcpListener class。

试试this SO answer

TcpListener 类监听传入的连接,当它找到一个时,它会创建一个 TcpClient 来完成它的工作。与此同时,听众已经开始寻找新的联系。几乎只是这样做,然后将工作转移到其他地方。

我认为(70% 肯定)它为新连接创建的 TcpClient 将在与您的侦听器使用的端口不同的端口上运行。因此,您总是在同一个端口上侦听,而您的处理是在其他端口上的其他线程上完成的。

有意义吗?如果需要,我可以详细说明。

【讨论】:

  • 是的,这是有道理的。谢谢,我想我现在可以弄清楚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多