C# 在System.Timers.Timer事件中调用UdpClient.Send()无效

C# 在System.Timers.Timer事件中调用UdpClient.Send()无效,c#,sockets,timer,udpclient,C#,Sockets,Timer,Udpclient,在我的应用程序中,我接收到一个UDP流,并在另外两个UDP端点上转发它。 我的问题是我需要在两个流之间设置一个延迟,所以我想使用计时器。 这是我的代码(我只显示了相关的方法): 注意。m_缓冲区成员是来自的循环缓冲区 这里的问题是 m_udpLocalClient.Send(Data, Data.Length, m_LocalEndPoint); 进入TimerCallBack似乎没有效果,而如果我将同一个取消注释到ReceiveData中,它就会起作用。 我还尝试使用异步方法BeginSen

在我的应用程序中,我接收到一个UDP流,并在另外两个UDP端点上转发它。 我的问题是我需要在两个流之间设置一个延迟,所以我想使用计时器。 这是我的代码(我只显示了相关的方法):

注意。m_缓冲区成员是来自的循环缓冲区

这里的问题是

m_udpLocalClient.Send(Data, Data.Length, m_LocalEndPoint);
进入TimerCallBack似乎没有效果,而如果我将同一个取消注释到ReceiveData中,它就会起作用。

我还尝试使用异步方法BeginSend(),但没有成功。我哪里错了

问候,

Daniele.

我认为,因为在收到一些数据后,您会立即返回到接收状态,所以不允许在计时器回调中使用相同的套接字发送数据。在计时器执行时,您已经告诉套接字等待更多数据进入


您需要使用不同的套接字/UdpClient在计时器回调中发送数据。

Hi@villecoder,您是对的,但我将代码更改为使用另一个UdpClient发送数据报,但仍然无法工作。对不起,您是对的!我只是创建了一个新的UdpClient:m_udpLocalSender=newudpclient();我将其用于计时器回调:m_udpLocalSender.Send(Data,Data.Length,m_LocalEndPoint);我错了?Send应该给你发送的字节数。它不是零吗?如果为非零,则数据已发送到m_LocalEndPoint。同时验证m_LocalEndPoint是否有一个侦听器正在等待数据。
m_udpLocalClient.Send(Data, Data.Length, m_LocalEndPoint);