树莓派 udp c语言,树莓派下运行两个程序,想要进行实时的数据传递,是用UDP进行本地通讯好,还是用全局变量好?...

树莓派新手一个。

终于遇到了我擅长的网络编程话题了。

TCP:可靠

UDP:快速

在网络条件不好的情况下,例如中国到美国,丢包是很常见的现象,如果使用单纯的UDP,那么你的数据包10个可能会丢掉9个。而TCP不会,因为协议内部有重发机制保证数据一定会到达。

但是我在这里不会建议你使用UDP或TCP这些传输层协议,因为它们只是传输协议,如果你需要应用,还有太多的事情要做,例如路由和应用层协议等。

连接各个设备和终端,已经有很多成熟方案,我推荐一个WAMP。它有各个语言的类库。可以很方便的进行即时通讯与远程数据获取。

即使像楼主这样运行在同一操作系统内的两个程序,也是适用这套方案的。

提供一个CPU使用率信息(python):

@app.register()

def get_cpu_percent():

from psutil import cpu_percent

return [cpu_percent(1)]

开关一个LED灯(浏览器中的js代码):

$scope.onLedOn = function () {

$wamp.call('com.example.led_on').then(function (res) {

//暂时没有返回值

})

};

$scope.onLedOff = function () {

$wamp.call('com.example.led_off').then(function (res) {

//暂时没有返回值

})

};

你看,在各种语言和终端之间通讯变得多么简单!

网站:http://wamp.ws

如果连python的pip都不会用的话,可能需要先补习一下python基础。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现基于 TCP 或 UDP树莓派和 PC 的通讯,可以使用 C 语言和标准的 Socket 编程库。下面是一个基于 TCP 的树莓派和 PC 之间的通讯的简单示例代码: 树莓派端代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 8888 #define MAXLINE 1024 int main() { int sockfd; char buffer[MAXLINE]; struct sockaddr_in servaddr; // 创建 socket sockfd = socket(AF_INET, SOCK_STREAM, 0); // 设置服务器地址 bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr("PC的IP地址"); servaddr.sin_port = htons(PORT); // 连接服务器 connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); // 发送数据 strcpy(buffer, "Hello from Raspberry Pi!"); write(sockfd, buffer, strlen(buffer)); // 接收数据 read(sockfd, buffer, MAXLINE); printf("%s\n", buffer); // 关闭 socket close(sockfd); return 0; } ``` PC端代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 8888 #define MAXLINE 1024 int main() { int sockfd, connfd; char buffer[MAXLINE]; struct sockaddr_in servaddr, cliaddr; // 创建 socket sockfd = socket(AF_INET, SOCK_STREAM, 0); // 设置服务器地址 bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(PORT); // 绑定地址 bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); // 监听连接 listen(sockfd, 5); // 接受连接 connfd = accept(sockfd, (struct sockaddr *)&cliaddr, NULL); // 接收数据 read(connfd, buffer, MAXLINE); printf("%s\n", buffer); // 发送数据 strcpy(buffer, "Hello from PC!"); write(connfd, buffer, strlen(buffer)); // 关闭 socket close(connfd); close(sockfd); return 0; } ``` 其中,树莓派端代码中的 `inet_addr("PC的IP地址")` 需要替换为 PC 的实际 IP 地址。根据实际需要,还可以使用 UDP 协议实现通讯,只需要将 `SOCK_STREAM` 替换为 `SOCK_DGRAM` 即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值