gpt4 book ai didi

c# - 来自 Socket 的 UWP SendToAsync 导致 AddressFamilyNotSupported

转载 作者:行者123 更新时间:2023-12-03 11:49:24 24 4
gpt4 key购买 nike

我正在使用 UWP 中的 Socket 类通过 UDP 将数据发送到特定设备。

问题是,在来回发送几次之后,我的用于发送的 SocketAsyncEventArgs 卡住了,并且在 SocketError 中我得到了 AddressFamilyNotSupported。

类的初始化是这样完成的

m_Socket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram, ProtocolType.Udp);
m_Socket.Bind(new IPEndPoint(IPAddress.Any, 51020));
m_SocketReceiveEventArgs = new SocketAsyncEventArgs();
m_SocketReceiveEventArgs.Completed += SocketArgsReceived;
m_SocketReceiveEventArgs.SetBuffer(m_ReceivingBuffer, 0,m_ReceivingBuffer.Length);
m_SocketSendEventArgs = new SocketAsyncEventArgs();
m_SocketSendEventArgs.Completed += SocketArgsSend;

虽然我通过发送(循环的条件仅用于测试目的):
m_SocketSendEventArgs.SetBuffer(aunReqBuffer, 0,aunReqBuffer.Length);
m_Socket.SendToAsync(m_SocketSendEventArgs);

while (m_SocketSendEventArgs.BytesTransferred == 0)
{
// AddressFamilyNotSupported happens here after a few packets have been send
}

并通过访问套接字并调用 ReceiveFromAsync() 在单独的线程中重复接收,该方法有效。

知道为什么它突然停止工作吗?
如果您需要更多信息,我很乐意提供帮助。

2017 年 3 月 8 日更新

我将发送方法包装在 using 语句中,现在它可以工作了。任何人都可以向我解释这个吗?尤其是我得到的奇怪的 SocketError。在我的内存中,我已经手动尝试过 .Dispose() ,所以我很困惑那里有什么不同。
using (var sendargs = new SocketAsyncEventArgs())
{
sendargs.Completed += SocketArgsSend;
sendargs.RemoteEndPoint = m_remoteIpEndPoint;
sendargs.SetBuffer(aunReqBuffer, 0, aunReqBuffer.Length);
m_Socket.SendToAsync(sendargs);
while (sendargs.BytesTransferred == 0)
{
// TODO: SocketErrorHandling
}
}

最佳答案

我假设您的 m_SocketReceiveEventArgs存储为类成员,因为您说这是在初始化中完成的。
因此,您正在重用相同的 m_SocketReceiveEventArgs每次发送。
请查看 MS 文档中关于要传递给 SendToAsync(SocketAsyncEventArgs) 的参数的说明。方法:

The SocketAsyncEventArgs object to use for this asynchronous socketoperation.


我是这样读的:你应该传递一个新的 SocketAsyncEventArgs每个新的参数 SendToAsync称呼。
我认为这解释了为什么将它放在 using 代码块中会使代码工作:它实际上是为每个修复代码的调用使用一个新参数。

关于c# - 来自 Socket 的 UWP SendToAsync 导致 AddressFamilyNotSupported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42579158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com