ump 中使用ConnectAsync连接服务器出现AccessDenied

本文介绍了解决Socket编程中遇到的AccessDenied错误的方法。通过修改Package.appxmanifest文件并添加必要的权限声明,如internetClientServer和privateNetworkClientServer,可以有效解决因权限不足导致的Socket连接失败问题。
            clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
            socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(OnConnect);
            socketEventArg.RemoteEndPoint = new IPEndPoint(IPAddress.Parse(serverIP), serverPort);
            socketEventArg.UserToken = clientSocket;

            clientSocket.ConnectAsync(socketEventArg);
这段代码连接失败,返回AccessDenied。


MSDN的说明是:An attempt was made to access a Socket in a way that is forbidden by its access permissions

权限不够!

那么哪里可以设置权限呢?

1.  Package.appxmanifest => 功能 ,然后勾选即可


2.  Package.appxmanifest => 右键 => 查看代码,然后加入如下代码

  <Capabilities>
    <Capability Name="internetClientServer" />
    <Capability Name="privateNetworkClientServer" />
  </Capabilities>


详细说明:https://msdn.microsoft.com/library/windows/apps/xaml/mt270968.aspx



在C#中使用MQTT通讯协议连接服务器端可以通过以下步骤实现。MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,适用于物联网设备之间的通信。以下是一个基本的示例,展示如何在C#中使用MQTT连接服务器端。 首先,需要安装一个MQTT客户端库。常用的库有MQTTnet。可以通过NuGet包管理器安装: ```sh Install-Package MQTTnet ``` 接下来,编写代码连接到MQTT服务器: ```csharp using System; using System.Text; using System.Threading.Tasks; using MQTTnet; using MQTTnet.Client; using MQTTnet.Client.Options; class Program { static async Task Main(string[] args) { // 创建一个MQTT客户端 var factory = new MqttFactory(); var client = factory.CreateMqttClient(); // 配置MQTT客户端选项 var options = new MqttClientOptionsBuilder() .WithClientId("CSharpClient") .WithTcpServer("broker.hivemq.com", 1883) // MQTT服务器地址和端口 .Build(); // 处理连接事件 client.UseConnectedHandler(async e => { Console.WriteLine("已连接到MQTT服务器"); // 订阅主题 await client.SubscribeAsync(new TopicFilterBuilder().WithTopic("test/topic").Build()); Console.WriteLine("已订阅主题: test/topic"); }); // 处理接收消息事件 client.UseApplicationMessageReceivedHandler(e => { Console.WriteLine("收到消息: " + Encoding.UTF8.GetString(e.ApplicationMessage.Payload)); }); // 连接到MQTT服务器 try { await client.ConnectAsync(options, CancellationToken.None); } catch (Exception ex) { Console.WriteLine("连接失败: " + ex.Message); return; } // 发布消息 var message = new MqttApplicationMessageBuilder() .WithTopic("test/topic") .WithPayload("Hello MQTT") .WithExactlyOnceQoS() .Build(); await client.PublishAsync(message, CancellationToken.None); Console.WriteLine("已发布消息: Hello MQTT"); // 保持程序运行以接收消息 Console.ReadLine(); // 断开连接 await client.DisconnectAsync(); } } ``` ### 代码说明: 1. **安装MQTTnet库**:通过NuGet包管理器安装MQTTnet库。 2. **创建MQTT客户端**:使用`MqttFactory`创建一个MQTT客户端实例。 3. **配置客户端选项**:设置客户端ID和MQTT服务器地址及端口。 4. **处理连接事件**:使用`UseConnectedHandler`处理连接事件,连接成功后订阅主题。 5. **处理接收消息事件**:使用`UseApplicationMessageReceivedHandler`处理接收到的消息。 6. **连接到MQTT服务器**:调用`ConnectAsync`方法连接到MQTT服务器。 7. **发布消息**:构建并发布一条消息到指定主题。 8. **保持程序运行**:使用`Console.ReadLine()`保持程序运行以接收消息。 9. **断开连接**:在程序结束前调用`DisconnectAsync`方法断开连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值