linux c socket每500ms发送一次数据,其他数据正常发送
时间: 2024-09-26 17:12:17 浏览: 39
Linux socket 发送数据,接收数据测试
4星 · 用户满意度95%
在Linux C语言中,如果你想通过socket每500毫秒发送一次数据,你可以使用定时器(如`select()`、`poll()`或`epoll()`)配合循环来实现这个功能。这里是一个基本的示例:
```c
#include <sys/time.h> // 包含时间处理头文件
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/socket.h>
// 创建socket函数
void create_socket(int *sock) {
*sock = socket(AF_INET, SOCK_STREAM, 0);
if (*sock == -1) {
perror("Failed to create socket");
exit(1);
}
}
// 发送数据函数
void send_data(int sock, char *data) {
int bytes_sent;
bytes_sent = send(sock, data, strlen(data), 0);
if (bytes_sent <= 0) {
perror("Failed to send data");
}
}
// 定时发送数据函数
void periodic_send(int sock, const char *data, long interval_ms) {
struct timeval timeout;
fd_set readfds;
while (1) {
timeout.tv_sec = interval_ms / 1000;
timeout.tv_usec = (interval_ms % 1000) * 1000; // 转换成微秒
FD_ZERO(&readfds);
FD_SET(sock, &readfds);
if (select(sock + 1, &readfds, NULL, NULL, &timeout) > 0) { // 如果超时或者有数据可读
send_data(sock, data); // 发送数据
} else {
perror("Select error or timeout");
break; // 可能需要检查错误条件并结束循环
}
}
}
int main() {
int sock = -1;
create_socket(&sock);
// 设置你的服务器地址和端口
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SOME_PORT);
inet_pton(AF_INET, "YOUR_SERVER_ADDRESS", &server_addr.sin_addr);
connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));
char data[] = "Periodic Data";
periodic_send(sock, data, 500);
close(sock);
return 0;
}
```
阅读全文