首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UWP AcceptAsync(SocketAsyncEventArgs e)始终返回true,从不调用SocketAsyncEventArgs.Completed的方法

UWP(Universal Windows Platform)是一种由微软推出的应用程序开发框架,用于创建适用于多种Windows设备的应用程序。UWP提供了一套统一的API,使开发人员能够在不同的设备上构建功能丰富且具有响应性的应用程序。

在UWP中,AcceptAsync(SocketAsyncEventArgs e)是用于异步接受传入的连接请求的方法。它接受一个SocketAsyncEventArgs对象作为参数,并在接受连接请求时返回一个布尔值。根据文档,AcceptAsync方法始终返回true,这意味着它不会阻塞并且总是接受连接请求。

然而,需要注意的是,AcceptAsync方法只负责接受连接请求,而不负责处理连接请求完成后的操作。为了处理连接请求完成后的操作,需要使用SocketAsyncEventArgs.Completed事件。在该事件中,可以通过检查SocketAsyncEventArgs.LastOperation属性来确定操作的类型,并根据需要执行相应的操作。

以下是一个示例代码,演示如何正确使用AcceptAsync方法和SocketAsyncEventArgs.Completed事件:

代码语言:csharp
复制
private Socket listener;

public void StartListening()
{
    // 创建监听Socket
    listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    // 绑定和监听端口
    listener.Bind(new IPEndPoint(IPAddress.Any, 1234));
    listener.Listen(10);

    // 创建SocketAsyncEventArgs对象
    SocketAsyncEventArgs args = new SocketAsyncEventArgs();
    args.Completed += OnAcceptCompleted;

    // 开始异步接受连接请求
    bool willRaiseEvent = listener.AcceptAsync(args);
    if (!willRaiseEvent)
    {
        // 如果AcceptAsync方法立即返回false,则表示连接请求已完成,需要手动处理
        OnAcceptCompleted(listener, args);
    }
}

private void OnAcceptCompleted(object sender, SocketAsyncEventArgs e)
{
    if (e.SocketError == SocketError.Success)
    {
        // 处理连接请求成功的情况
        // 在这里可以执行接受连接请求后的操作,如处理数据传输等
    }
    else
    {
        // 处理连接请求失败的情况
    }

    // 继续接受下一个连接请求
    e.AcceptSocket = null;
    bool willRaiseEvent = listener.AcceptAsync(e);
    if (!willRaiseEvent)
    {
        // 如果AcceptAsync方法立即返回false,则表示连接请求已完成,需要手动处理
        OnAcceptCompleted(listener, e);
    }
}

在上述示例中,我们创建了一个Socket对象作为监听Socket,并使用AcceptAsync方法开始异步接受连接请求。在OnAcceptCompleted方法中,我们处理了连接请求完成后的情况,并继续接受下一个连接请求。

对于UWP开发中的网络通信,腾讯云提供了一系列相关产品和服务,例如腾讯云网络产品、腾讯云CDN加速、腾讯云负载均衡等。您可以通过访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息和使用指南。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

KestrelServer详解: 网络连接的创建

它的EndPoint属性表示监听器绑定的终结点,当AcceptAsync方法被调用时,监听器便开始了网络监听工作。...如果将这个HttpParserHandler对象传递给HttpParser对象,后者在请求解析过程中会调用前者相应的方法,我们利用这些方法利用读取的内容将描述请求的HttpRequestFeature特性构建出来...我们调用该工厂的BindAsync方法创建了一个连接监听器并将其绑定到采用5000端口本地终结点。...在一个无限循环中,我们调用监听器的AcceptAsync方法开始监听连接请求,并最终将代表连接的ConnectionContext上下文创建出来。...HandleAsync方法在处理每个请求时会确定是否携带了此报头,并在需要的时候调用ConnectionContext上下文的 DisposeAsync方法关闭并释放当前连接。

81810
  • win10 uwp 处理用户点击关闭按钮

    在 UWP 开发的时候,我做的文档软件需要在文档还没有保存的时候,用户点击关闭按钮的时候告诉用户需要保存。...{ // 让用户无法关闭 e.Handled = true; var messageDialog = new...(); } 只需要通过 e.Handled = true 就可以阻止用户关闭应用,就这样写出了一个用户无法快速退出的应用,基本上只能通过任务管理器才能退出 在我的软件里面作为文档软件需要在用户退出的时候发现有没有保存的文档就提示用户保存...提供了延迟关闭的方法 在开始显示提示页面之前,调用 e.GetDeferral() 方法拿到返回值,在执行完成方法之后调用完成方法,请看代码 var deferral = e.GetDeferral...,这样可以在执行完成更多代码之后才调用完成

    88810

    如何将GridViewEX升级到UWP(Universal Windows Platform)平台

    由于微软支持的设备种类越来越多,导致ApplicationViewState不再适用。UWP平台提供了其他的解决方法如AdaptiveTriggers,内置了自适应布局。...无论是WinRT还是UWP应用,都会使用返回键导航。桌面WinRTx应用会在Xaml文件添加返回按钮。...但是在UWP应用中,非常灵活,桌面应用可以在标题栏中添加返回按钮,在移动设备中不仅能使用标题栏中的返回键,也可以使用物理返回键实现导航功能。UWP的方法比较通用,且不需要编写自定义的Xaml文件。...显然UWP 中的GridView 将所有非空项的该属性都设置为None。因此,如果不重写OnDragOver 方法,Drop 事件就不会被触发。...; 运行代码时编译器会发出很多关于ItemContainerGenerator 方法的警告,调用ItemsControl 响应方法就可以处理Warning VariableSizedWrapGrid存在很多限制

    2.8K80

    C# 设计模式 责任链 后退按钮使用责任链

    我看了他的源代码,他每个页面都把后退按钮点击事件+=他的方法。 我们可以使用UWP的后退按钮,但是需要小心,在哪些处理需要知道,不可以在每个需要处理都添加事件。...接下来就是需要返回的按钮,参见win10 UWP 标题栏后退 protected override void OnNavigatedTo(NavigationEventArgs e)...刚好在显示结束的时候关闭双击退出。 在我之前写的游戏win10 uwp 商业游戏进入游戏时,用户按下返回按钮,需要返回欢迎界面,那么这时候就需要添加后退的处理。...这里的意思是如果调用一个方法,这个方法有 await 那么这个方法如果不是 async Task 那么就会直接被跳过,不会往下面执行,所以如果把最后一句代码替换前面的,那么就会调用责任链的下一处理,但是没有告诉他已经处理了...%8F-%E8%B4%A3%E4%BB%BB%E9%93%BE.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

    92710

    C# 设计模式 责任链

    我看了他的源代码,他每个页面都把后退按钮点击事件+=他的方法。 我们可以使用UWP的后退按钮,但是需要小心,在哪些处理需要知道,不可以在每个需要处理都添加事件。...接下来就是需要返回的按钮,参见win10 UWP 标题栏后退 protected override void OnNavigatedTo(NavigationEventArgs e)...刚好在显示结束的时候关闭双击退出。 在我之前写的游戏win10 uwp 商业游戏进入游戏时,用户按下返回按钮,需要返回欢迎界面,那么这时候就需要添加后退的处理。...当然自己添加的处理也是需要判断当前是否已经有权限比他高的进行处理,如果有,就不处理。这样写就可以在游戏进行返回。...这里的意思是如果调用一个方法,这个方法有 await 那么这个方法如果不是 async Task 那么就会直接被跳过,不会往下面执行,所以如果把最后一句代码替换前面的,那么就会调用责任链的下一处理,但是没有告诉他已经处理了

    55030

    win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序 VisualStudio创建项目引用项目创建通用结构设置控制器运行网站UWP 连接上传数据

    控制器就是访问 URL 时可以返回结果的类。通过控制器才可以使用 URL 访问,当然使用其他的方法也是可以做到,但是没有这个方法好用。 右击 Controler 添加,点击添加控制器 ?...本文不会告诉大家很多关于 ViewModel 的方法,如果想了解这个写法,请看win10 uwp MVVM入门 ViewModel 现在需要定义一个数据结构,ObservableCollection 的列表...调用 ViewModel 的函数用来更新数据 private void Button_OnClick(object sender, RoutedEventArgs e)...因为 asp dotnet core 程序返回的是 json ,可以通过设置让他返回 xml 。因为刚才没设置,默认返回的格式是 json 。...通过简单的 Get 的方法访问 URL 可以使用下面代码,参见 win10 UWP GET Post - CSDN博客 public async Task Update()

    1.3K10

    《ASP.NET Core 6框架揭秘》实例演示:自定义一个服务器

    该方法为每个IListener对象开启一个“接收和处理请求”的循环,循环中的每次迭代都会调用IListener对象的AcceptAsync方法来接收请求,我们利用RequestContext对象来表示请求上下文...特性集合随后作为参数调用IHttpApplication的CreateContext方法将TContext上下文创建出来,后者将进一步作为参数调用另一个ProcessRequestAsync...待处理结束,IHttpApplication对象的DisposeContext方法被调用,创建的TContext上下文承载的资源得以释放。...此上下文进一步作为参数调用了IHttpApplication对象的ProcessRequestAsync方法,中间件管道得以接管请求。...在调用WebApplication对象的Run方法时显式指定了具有PathBase(“/foobar”)的监听地址“http://localhost:5000/foobar/”,如图1所示的浏览器以此地址访问应用

    39620

    如何在UWP中统一处理不同设备间的页面回退逻辑

    在本篇缪文中,楼主打算给UWP开发的初学者讲述一个在开发中经常遇到的很现实的问题:页面回退逻辑 。...当我们的UWP应用程序运行在不同的设备上时,不同设备间的页面回退逻辑我们就要考虑周全,要考虑不同设备间的页面回退操作该如何设计才能更好的满足用户的使用需求。...为了方便,楼主这里只简单论述一下当我们的UWP应用程序运行在PC上和Mobile上时该如何处理不同平台的页面回退逻辑。...但是当我们的UWP应用程序运行在Mobile上时,如果还是用这种方法来进行页面回退的的话,对用户来说就可能不是很友好,因此,我们要投其说好,用手机设备上的物理后退键来实现相应的页面回退逻辑,其对应的API...我们需要为应用程序提供一个全局的页面跳转,这样方便使用;其次我们需要将应用程序的初始页面改造为一个用户控件,这样就保证引用程序始终加载的是一个用户控件。

    98080

    Windows Community Toolkit 3.0 - CameraPreview

    顾名思义,3.0 版本会更注重整个 Windows 平台的工具实现,而不再只局限于 UWP 应用,这从 Release Note 也可以看出来:https://github.com/Microsoft/...; Nuget: Microsoft.Toolkit.Uwp.UI.Controls; 开发过程 代码分析 首先来看 CameraPreview 的类结构: CameraPreview.Cpmstants.cs...,调用 Stop() 来结束并释放摄像头资源; 而 CameraPreview 类中出现了一个很重要的帮助类 CameraHelper,它的作用是对摄像头资源的获取和视频帧的获取/处理,它是 CameraPreview...InitializeMediaCaptureAsync() 上面方法中使用的初始化 MediaCapture 的方法,首先获取预览帧源,获取顺序是彩色预览 -> 视频录制;接着判断它支持的格式,包括视频帧率...(>= 15 帧),媒体编码格式的支持(Nv12,Bgra8,Yuy2,Rgb32),按照视频宽高进行排序;对支持状态进行判断,如果状态可用,则返回默认最高分辨率;同时该方法会对权限等进行判断,对错误状态返回对应状态

    64710

    win10 uwp 通过 win2d 画出笔迹 界面笔迹性能原理完全控制墨迹多指输入转换笔迹无限漫游

    我才不告诉大家,我也不知道他是怎么做的 完全控制墨迹 在 UWP 的笔迹可以通过调用 ActivateCustomDrying 方法完全控制笔迹的静态渲染,也就是 InkCanvas 可以让代码处理从动态转静态的方法...如果这时还没有将静态笔迹画出来,界面就看不到原来的笔迹 在 UWP 可以多次调用 BeginDry 拿到动态笔迹,假如现在有动态笔迹 1、2 调用 BeginDry 会返回动态笔迹 1、2 然后用户继续触摸...,在界面有动态笔迹 3 再次调用BeginDry会返回第三条笔迹。...但是只能调用一次 EndDry 也就是在调用多次 BeginDry 只有只能调用一次 EndDry 不能相邻两次调用 EndDry 方法 在 win2d 画静态笔迹首先需要刷新界面 private void...uwp-%E9%80%9A%E8%BF%87-win2d-%E7%94%BB%E5%87%BA%E7%AC%94%E8%BF%B9.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

    1.1K20

    依赖属性2:使用依赖属性

    因为这个方法是静态的,可以再实现一个同名的实例方法(可以参考ContentControl的OnContentChanged方法)。...Slider与OneWayBinding的"Bug" UWP的依赖属性比起WPF有了大幅简化,需要学习的地方少了很多,但是功简化了也不一定是一件好事。...在这个例子里,如果在这个函数开头的位置调用 range.ReadLocalValue(range.ValueProperty),返回的是一个Binding,在结尾的位置调用,返回的则是double类型的...在WPF中,这个问题并不存在,因为WPF的依赖属性可以使用CoerceValueCallback约束属性值,而UWP的依赖属性被简化了,缺少这个功能。...RangeBase.cs 这个是Silverlight的开源实现Moonlight的源码,Moonlight的源码对理解UWP、Silverlight都很有参考价值。

    1.4K30

    New UWP Community Toolkit - DeveloperTools

    (s, e) 一样,主要处理逻辑在 Rebuild() 方法中,下面我们看看 Rebuild() 方法实现: 清空 containerCanvas,获取当前横向和纵向步长,如果 lineBrush 无效...,属性变化时会触发 OnIsActiveChanged(d, e) 处理方法,IsActive == true 时,调用 Start() 方法;IsActive == false 时,调用 Stop()...方法; 我们看到,类中的主要处理是定义一个 DispatcherTimer,在 Start() 方法中实例化并启用它,Stop() 方法中停止它,并清空内容显示; private void Start...string.Empty; } } 调用示例 1....总结 到这里我们就把 UWP Community Toolkit 中的 DeveloperTools 的实现过程和简单的调用示例讲解完成了,希望这些工具对大家开发 UWP 应用有所帮助,如果大家有更好用的工具类

    88370
    领券