- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 UDPClient 发送多播请求并接收来自网络上各种客户端的响应。我能够发送请求并得到响应,但是我得到的响应非常慢。需要 2-3 分钟才能得到所有客户端的响应。在我检查 WireShark 的网络发送请求时,我看到所有客户端仅在测试程序中以毫秒为单位的响应。这需要很多时间。谁能指导我可能犯的错误?以下是代码。请指导我。在过去的两天里,我一直被这个问题所困扰。
public class Trinity_WSDiscovery : IDiscoveryService
{
#region IDiscoveryService Members
public event EventHandler FoundNewDevice;
public event EventHandler EndOfDiscovery;
DeviceBinding m_DeviceBinding;
bool IsFindComplete = false;
Thread receiveThread;
UdpClient sock ;
IPEndPoint RemoteIpEndPoint = new IPEndPoint(System.Net.IPAddress.Any, 0);
IPEndPoint iep = new IPEndPoint(System.Net.IPAddress.Parse("239.255.255.250"), 3702);
UdpState udpState = new UdpState();
XmlDocument xmlDoc = new XmlDocument();
public void Start()
{
//Need to create new object every time we start discovery because
//every time udp buffer needs to be flushed and restarted
sock = new UdpClient();
string str = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:d=\"http://schemas.xmlsoap.org/ws/2005/04/discovery\" xmlns:wsadis=\"http://schemas.xmlsoap.org/ws/2004/08/addressing\" xmlns:dn=\"http://www.onvif.org/ver10/network/wsdl\"><soap:Header><wsadis:MessageID>uuid:" + System.Guid.NewGuid().ToString() + "</wsadis:MessageID><wsadis:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsadis:To><wsadis:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsadis:Action></soap:Header><soap:Body><d:Probe><d:Types /> <d:Scopes/></d:Probe></soap:Body></soap:Envelope>";
byte[] data = Encoding.ASCII.GetBytes(str);
sock.Send(data, data.Length, iep);
sock.JoinMulticastGroup(System.Net.IPAddress.Parse("239.255.255.250"));
IPEndPoint iep1 = new IPEndPoint(System.Net.IPAddress.Any, 0);
udpState.ipEndpt = RemoteIpEndPoint;
udpState.udpClient = sock;
BeginReceive();
}
public void BeginReceive()
{
Thread.Sleep(100);
if (sock.Available > 0)
{
sock.BeginReceive(new AsyncCallback(ReceiveCallback), udpState);
}
else
{
FindComplete();
}
}
public void ReceiveCallback(IAsyncResult ar)
{
UdpClient udpClient = (UdpClient)((UdpState)(ar.AsyncState)).udpClient;
IPEndPoint ipEndpt = (IPEndPoint)((UdpState)(ar.AsyncState)).ipEndpt;
Byte[] receiveBytes = udpClient.EndReceive(ar, ref ipEndpt);
string receiveString = Encoding.ASCII.GetString(receiveBytes);
if (receiveString.Contains("NetworkVideoTransmitter"))
{
xmlDoc.LoadXml(receiveString);
XmlNodeList list = xmlDoc.GetElementsByTagName("XAddrs", "http://schemas.xmlsoap.org/ws/2005/04/discovery");
XmlNode node = list[0];
string strEndPoints = node.FirstChild.Value;
string[] strEndPointList = Regex.Split(strEndPoints, " ");
OnFoundDevice(strEndPointList);
}
BeginReceive();
}
}`
最佳答案
为什么需要 Thread.Sleep
?
这可能会导致延迟。
关于c# - UDPClient Async BeginReceive 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6027706/
当然,如果没有数据,BeginReceive() 将永远不会结束。MSDN suggests调用 Close() 会中止 BeginReceive()。 但是,在套接字上调用 Close() 也会对其
我用BeginReceive()方法监听特定的端口。 如何找到发件人的IP? 谢谢你。 最佳答案 我认为您应该详细说明您的问题。 无论如何,您都可以在清晰而详细的"Asynchronous Serve
我有一个用 C# 编写的简单异步套接字服务器(几乎是 Microsoft 的 example ),但是这个示例的问题是它只接受来自客户端的一条消息,然后关闭。我希望此服务器在收到任何消息后保持事件状态
据说 BeginReceive 和 BeginSend 回调不会在 .Net ThreadPool 上执行,而是在 上执行IOCP 线程池。对于高性能服务器,IOCP 线程尽快返回池至关重要,这意味着
基本上我已经建立了套接字连接。这是我的 WaitData 方法: public void WaitForData() { State state = new State
当读取未完成时,读取缓冲区有问题。 如果接收到的 XML 数据是有效的,那么我没有问题。但是,当接收到的 XML 数据不正确时,我正在等待数据的第二部分,然后出现错误。 我的代码如下: int cur
如果客户端通过同一个套接字向服务器发送多条消息,服务器端的 EndReceive 是否会将消息分开,或者服务器是否有可能在单个 BeginReceive 中接收来自两个单独发送的部分消息? 最佳答案
我目前有一个后台线程。在这个线程中是一个无限循环。 这个循环偶尔更新数据库中的一些值,然后在 MessageQueue 上监听 1 秒(使用 queue.Receive(TimeSpan.FromSe
要从套接字异步接收数据,.Net 支持对称的 BeginReceive/EndReceive 调用。基本上你调用BeginReceive()开始监听并确定数据到达时应调用的回调。在回调中调用 EndR
我想做这个 for (int i = 0; i 0 以确定在执行 UdpClient.Receive() 之前是否有任何 UDP 请求排队- 这完全消除了阻塞方面。我确实建议您谨慎尝试此操作,因为此
Socket.BeginReceive/EndReceive 函数的调用顺序是什么? 例如,我两次调用 BeginReceive,一次是为了获取消息长度,第二次是为了获取消息本身。现在的场景是这样的,
在 F# 中使用原始套接字编写异步 Ping,以使用尽可能少的线程启用并行请求。不使用“System.Net.NetworkInformation.Ping”,因为它似乎为每个请求分配一个线程。我也对
我需要接收异步消息。 在所有消息中,前 2 个字节表示下一个字节数组的长度。我的问题是在少数情况下我会收到意外的数据包。 如果我使用 Thread.Sleep(200)这个问题不会发生,或者很少发生。
首先让我说这与 UDP 作为协议(protocol)的可靠性无关。我知道数据包可能会被丢弃、乱序到达等。另外,严格来说,这不是数据速率的问题(我不是试图每秒处理太多的数据包),也不是数据量的问题数据(
我正在使用 UDPClient 发送多播请求并接收来自网络上各种客户端的响应。我能够发送请求并得到响应,但是我得到的响应非常慢。需要 2-3 分钟才能得到所有客户端的响应。在我检查 WireShark
问题: 当我做这样的事情时: for (int i = 0; i < 100; i++) { SendMessage( sometSocket, i.ToString()); Thre
嗨堆栈溢出成员。我正在努力处理一些简单的代码,但无法完成。我有这个等待连接的异步服务器。 while (clientSocket.Connected) { try
我在简单的 Udp 服务器中使用 UdpClient。 是否可以仅从特定的 IP 地址接收 BeginReceive()? 谢谢 最佳答案 没有。这是 UDP 的基础,它不像 TCP 那样是面向连接的
好的,这是我的第一个堆栈溢出问题,所以请随时提出更好的提问方式或我下次应该包括的内容。大多数时候我可以通过谷歌获得答案,但这个有点棘手...... 我正在用 C# 编写一个 Windows 应用程序,
我的 TCP ping/pong 工作正常,但在尝试添加第二种数据类型后,我遇到了接收程序从未触发 BeginReceive 回调的情况。 代码是相同的,除了第二个(有问题的)数据类型,序列化是提前完
我是一名优秀的程序员,十分优秀!