以太网口发送数据的函数代码
时间: 2024-10-17 20:13:00 浏览: 20
以太网数据发送通常涉及到网络编程,比如在Linux系统下,你可以使用Socket API中的sendto()函数。下面是一个简单的示例,展示了如何通过以太网发送数据:
```c
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int send_data(char* data, size_t len, struct sockaddr_in* dest_addr) {
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // 创建套接字
if (sock < 0) {
perror("Failed to create socket");
return -1;
}
// 将IP地址转换为网络字节序
struct sockaddr_in my_addr = *(struct sockaddr_in*) &dest_addr;
bzero(&my_addr.sin_zero, sizeof(my_addr.sin_zero));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(dest_addr->sin_port);
inet_aton(dest_addr->sin_host, &my_addr.sin_addr);
// 发送数据
ssize_t sent_len = sendto(sock, data, len, 0, (struct sockaddr*)&my_addr, sizeof(my_addr));
if (sent_len == -1) {
perror("Failed to send data");
close(sock);
return -1;
}
printf("Sent %zd bytes of data.\n", sent_len);
close(sock); // 关闭套接字
return 0;
}
// 使用示例
struct sockaddr_in dest_addr = {
.sin_family = AF_INET,
.sin_port = htons(1234), // 目标端口号
.sin_addr.s_addr = inet_addr("192.168.1.1"), // 目标IP地址
};
char* data = "Hello, Ethernet!";
size_t len = strlen(data) + 1;
send_data(data, len, &dest_addr);
```
注意这只是一个基础示例,实际应用中可能还需要处理错误、设置正确的协议选项等。同时,以太网的数据包发送可能会更复杂,涉及数据帧的构建和封装。
阅读全文