tcp udp树莓派和pc通讯用c语言实现
时间: 2023-07-27 19:25:17 浏览: 193
实现基于 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` 即可。
阅读全文