服务器只能单向传文件,udp连接单向传输 (只能是服务器向已连接的udp客户端单项发送数据)...

#include typedef struct sockaddr sockaddr_t;

typedef struct sockaddr_in sockaddr_in_t;

typedef struct in6_addr in6_addr_t;

typedefunsigned intu32;

#define CURprintf("%s : %d\n", __FILE__, __LINE__);

#define SeverIP"192.168.1.104"

#define ClientIP"192.168.1.107"

#define THRAN_1024 1025

#define PORT THRAN_1024

static int sfd, ret, len = sizeof(sockaddr_t);

static sockaddr_in_t server_addr;// 服务器地址

static sockaddr_in_t client_addr;// 客户端地址

/* ctr +c 关闭描述符*/

static void sig_int(int sig)

{close(sfd);

exit(0);

}

#if 0

void *work_sendto(void *arg)

{

char buf[50];

int ret;

while (1) {

memset(buf, 0, 50);

fgets(buf, 50, stdin);// 获取输入

ret = sendto(sfd, buf, strlen(buf), 0, NULL, 0);

printf("s: %d\n", ret);

}

pthread_exit(NULL);

}

#endif

void *work_recvfrom(void *arg)

{

char buf[50];

int ret;

while (1) {

memset(buf, 0, 50);

ret = recvfrom(sfd, buf, sizeof(buf), 0, NULL, 0);

printf("recvfrom %d: %s", ret, buf);

if (!ret) {

perror("client shutdown");

exit(0);

}

}

pthread_exit(NULL);

}

int main(int argc, char **argv)

{

pthread_t tid_sendto, tid_recvfrom;// 线程标识ID, 非线程调度ID

sfd = socket(AF_INET, SOCK_DGRAM, 0);

signal(SIGINT, sig_int);

// 服务器套接字绑定地址

memset(&server_addr, 0, sizeof(sockaddr_in_t));

server_addr.sin_family = AF_INET;

server_addr.sin_port = htons(PORT);// 服务器端口号

server_addr.sin_addr.s_addr = inet_addr(SeverIP);

if(-1 == bind(sfd, (sockaddr_t *)&server_addr, len)) {

perror("bind err");

goto err;

}

/* 子线程1发送 */

/* 子线程2接收 */

//if(pthread_create(&tid_sendto, NULL, work_sendto, NULL))

//perror("pthread_create err");

// 对于已经和服务端进行连接了的UDP套接字, 服务端不能向其发送消息

if(pthread_create(&tid_recvfrom, NULL, work_recvfrom, NULL))

perror("pthread_create err");

pthread_join(tid_sendto, NULL);

pthread_join(tid_recvfrom, NULL);

return 0;

err:

close(sfd);

return -1;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在MicroPython中使用TLS单向认证连接MQTT服务器并发送消息需要使用到umqtt.simple库。 首先需要在本地创建证书文件(如ca.pem)。然后使用umqtt.simple.MQTTClient类创建MQTT客户端对象,并设置连接参数,如服务器地址、端口、客户端ID、证书文件路径等。 在连接时使用.set_ssl()函数设置TLS,并将ca.pem文件入。 最后使用.connect()函数连接服务器,并使用.publish()函数发布消息。 例如: ```python from umqtt.simple import MQTTClient client = MQTTClient("my_client_id", "mqtt.example.com", port=8883) client.set_ssl("ca.pem") client.connect() client.publish("topic", "message") ``` 需要注意的是,如果使用的是micropython, 需要使用umqtt.robust库,并且在使用的时候需要把证书文件内容转成字符串入。 ```python from umqtt.robust import MQTTClient import ubinascii # 读取证书文件 with open('ca.pem', 'r') as f: ca = f.read() client = MQTTClient(client_id, server, port=8883, user=None, password=None, ssl=True, ssl_params={'ca_certs':ca,'cert_reqs':ssl.CERT_REQUIRED}) client.connect() client.publish("topic", "message") ``` ### 回答2: 在Micropython中,要使用TLS单向认证(客户端验证服务器连接MQTT服务器并发送消息,需要遵循以下步骤: 1. 导入必要的库:首先,需要导入`network`和`ussl`库,`network`用于网络连接,`ussl`用于TLS连接。 2. 建立网络连接:使用`network`库建立与MQTT服务器的网络连接。可以使用`WLAN`或`LAN`类,具体方法取决于设备和网络类型。 3. 创建TLS连接:通过使用`ussl.wrap_socket`方法,创建TLS连接。使用此方法,需要提供已建立的网络连接和TLS协议的版本(如`ussl.PROTOCOL_TLSv1_2`)。 4. 连接MQTT服务器:使用`usocket`库中的套接字方法,建立与MQTT服务器连接。需要提供服务器的主机名和端口号。 5. 发送连接请求:使用MQTT协议的相关方法,发送连接请求给服务器。需要提供客户端ID、用户名、密码等信息。 6. 发布消息:使用MQTT协议的相关方法,向服务器发布消息。需要提供主题、消息内容和QoS等信息。 以下是一个示例代码: ```python import network import ussl import usocket import ubinascii from umqtt.simple import MQTTClient # 1. 导入必要的库 # 2. 建立网络连接 # 3. 创建TLS连接 sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM) sock = ussl.wrap_socket(sock, server_hostname="mqtt.example.com") # 4. 连接MQTT服务器 mqtt_client = MQTTClient("client_id", "mqtt.example.com", ssl_sock=sock) # 5. 发送连接请求 mqtt_client.connect() # 6. 发布消息 mqtt_client.publish("topic", "message") # 关闭连接 mqtt_client.disconnect() sock.close() ``` 以上示例代码用于连接名为"mqtt.example.com"的MQTT服务器,并向主题"topic"发布消息"message"。请根据实际情况修改主机名、端口号、客户端ID、用户名、密码、主题和消息内容等参数。 ### 回答3: 在Micropython中,使用TLS单向认证连接MQTT服务器并发送消息需要按照以下步骤进行: 1. 首先,确保您的Micropython设备以及MQTT服务器支持TLS协议。如果不支持,需要升级或更换设备和服务器。 2. 获取MQTT服务器的根证书(CA证书)以及客户端的证书和私钥。在确认服务器支持TLS时,可以向服务器管理员申请根证书,并从服务器获得客户端证书和私钥。 3. 将根证书、客户端证书和私钥文件分别保存到Micropython设备的文件系统中,以便后续使用。 4. 在Micropython设备上使用TLS单向认证时,需要安装TLS支持库。可以通过安装`umqtt.robust`库来实现MQTT协议的通信,并安装`urequests`库来支持HTTPS协议,用于下载证书文件。 5. 设定MQTT服务器连接参数,包括服务器的地址、端口号和MQTT客户端的ID。 6. 配置TLS客户端的参数,包括根证书文件路径、客户端证书和私钥文件路径等。 7. 在Micropython中,可以使用`import socket`和`import ssl`模块来实现TLS连接。使用`socket`模块创建一个socket对象,然后使用`ssl.wrap_socket()`方法将其包装为TLS连接。 8. 使用MQTT的连接请求消息来连接MQTT服务器。 9. 连接成功后,可以使用MQTT的发布消息来发送消息到服务器。 以上是在Micropython中使用TLS单向认证连接MQTT服务器并发送消息的大致步骤。具体实现过程可能因设备、服务器和框架版本而有所不同,因此需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值