250 lines
6.1 KiB
C
250 lines
6.1 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <arpa/inet.h>
|
|
|
|
#define PORT 8004
|
|
#define SERVER_IP "255.255.255.255"
|
|
#define BUFFER_SIZE 1024
|
|
|
|
int main() {
|
|
int sockfd;
|
|
struct sockaddr_in server_addr;
|
|
char buffer[BUFFER_SIZE];
|
|
|
|
// 创建 UDP 套接字
|
|
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
if (sockfd < 0) {
|
|
perror("socket creation failed");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
// 设置套接字为广播模式
|
|
int broadcast = 1;
|
|
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)) < 0) {
|
|
perror("setsockopt failed");
|
|
close(sockfd);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
// 初始化服务器地址
|
|
memset(&server_addr, 0, sizeof(server_addr));
|
|
server_addr.sin_family = AF_INET;
|
|
server_addr.sin_port = htons(PORT);
|
|
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
|
|
|
|
// 发送数据
|
|
const char *message = "Hello from client!";
|
|
if (sendto(sockfd, message, strlen(message), 0,
|
|
(struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
|
|
perror("sendto failed");
|
|
close(sockfd);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
printf("Message sent to %s:%d\n", SERVER_IP, PORT);
|
|
|
|
// 接收响应
|
|
ssize_t bytes_received = recvfrom(sockfd, buffer, BUFFER_SIZE, 0,
|
|
NULL, NULL);
|
|
if (bytes_received < 0) {
|
|
perror("recvfrom failed");
|
|
} else {
|
|
printf("Received %ld bytes from server\n", bytes_received);
|
|
buffer[bytes_received] = '\0';
|
|
printf("Received response: %s\n", buffer);
|
|
}
|
|
|
|
close(sockfd);
|
|
return 0;
|
|
}
|
|
|
|
// #include <stdio.h>
|
|
// #include <stdlib.h>
|
|
// #include <string.h>
|
|
// #include <unistd.h>
|
|
// #include <sys/socket.h>
|
|
// #include <sys/types.h>
|
|
// #include <netinet/in.h>
|
|
// #include <arpa/inet.h>
|
|
|
|
// int main() {
|
|
// int sock = -1;
|
|
// if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
|
|
// perror("socket error");
|
|
// return -1;
|
|
// }
|
|
|
|
// const int opt = 1;
|
|
// int nb = 0;
|
|
// nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
|
|
// if (nb == -1) {
|
|
// perror("set socket error...");
|
|
// return -1;
|
|
// }
|
|
|
|
// struct sockaddr_in addrto;
|
|
// memset(&addrto, 0, sizeof(struct sockaddr_in));
|
|
// addrto.sin_family = AF_INET;
|
|
// addrto.sin_addr.s_addr = htonl(INADDR_BROADCAST);
|
|
// addrto.sin_port = htons(8004);
|
|
// int nlen = sizeof(addrto);
|
|
|
|
// while (1) {
|
|
// sleep(1);
|
|
// char smsg[] = "abcdef";
|
|
// int ret = sendto(sock, smsg, strlen(smsg), 0, (struct sockaddr *)&addrto, nlen);
|
|
// if (ret < 0) {
|
|
// perror("send error....");
|
|
// } else {
|
|
// printf("ok ");
|
|
// }
|
|
// }
|
|
|
|
// return 0;
|
|
// }
|
|
|
|
/*
|
|
* main.c
|
|
*
|
|
* Created on: Sep 26, 2022
|
|
* Author: root
|
|
*/
|
|
|
|
// #include <stdio.h>
|
|
// #include <string.h>
|
|
// #include <unistd.h>
|
|
// #include <sys/socket.h>
|
|
// #include <sys/types.h>
|
|
// #include <arpa/inet.h>
|
|
|
|
// #define BOARDCAST_IP "255.255.255.255"
|
|
// #define BOARDCAST_PORT 10130
|
|
|
|
// int broadcast_send(void)
|
|
// {
|
|
// int fd;
|
|
// int ret;
|
|
// int on;
|
|
// struct sockaddr_in addr;
|
|
// const char* message = "This is boardcast message !";
|
|
|
|
// fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
|
|
// if(fd < 0)
|
|
// {
|
|
// fprintf(stderr, " create socket failed ! \n");
|
|
// goto __exit;
|
|
// }
|
|
|
|
// on = 1;
|
|
// ret = setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
|
|
// if(ret < 0)
|
|
// {
|
|
// fprintf(stderr, " setsockopt failed ! \n");
|
|
// goto __exit;
|
|
// }
|
|
|
|
// memset(&addr, 0, sizeof(addr));
|
|
|
|
// addr.sin_family = AF_INET;
|
|
// addr.sin_port = htons(BOARDCAST_PORT);
|
|
// addr.sin_addr.s_addr = inet_addr(BOARDCAST_IP);
|
|
|
|
// ret = sendto(fd, message, strlen(message), 0, (struct sockaddr *)&addr, sizeof(addr));
|
|
// if(fd < 0)
|
|
// {
|
|
// fprintf(stderr, " boardcast failed ! \n");
|
|
// goto __exit;
|
|
// }
|
|
|
|
// printf(" send ok ! \n");
|
|
|
|
// __exit:
|
|
// close(fd);
|
|
// return 0;
|
|
// }
|
|
|
|
// int broadcast_recv(void)
|
|
// {
|
|
// int fd;
|
|
// int ret;
|
|
// int on;
|
|
// struct sockaddr_in addr, addr_from;
|
|
// char message[512];
|
|
// socklen_t len;
|
|
|
|
// fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
|
|
// if(fd < 0)
|
|
// {
|
|
// fprintf(stderr, " create socket failed ! \n");
|
|
// goto __exit;
|
|
// }
|
|
|
|
// on = 1;
|
|
// ret = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
|
|
// if(ret < 0)
|
|
// {
|
|
// fprintf(stderr, " setsockopt failed ! \n");
|
|
// goto __exit;
|
|
// }
|
|
|
|
// memset(&addr, 0, sizeof(addr));
|
|
|
|
// addr.sin_family = AF_INET;
|
|
// addr.sin_port = htons(BOARDCAST_PORT);
|
|
// addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
|
|
// ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
|
|
// if(ret < 0)
|
|
// {
|
|
// fprintf(stderr, " bind failed ! \n");
|
|
// goto __exit;
|
|
// }
|
|
|
|
// memset(message, 0X00, sizeof(message));
|
|
|
|
// len = sizeof(addr_from);
|
|
// ret = recvfrom(fd, message, sizeof(message), 0, (struct sockaddr *)&addr_from, &len);
|
|
// if(ret < 0)
|
|
// {
|
|
// fprintf(stderr, " recv failed ! \n");
|
|
// goto __exit;
|
|
// }
|
|
|
|
// printf(" recv: [%s] ok ! \n", message);
|
|
|
|
// __exit:
|
|
// close(fd);
|
|
// return 0;
|
|
// }
|
|
|
|
// int main(int argc, const char* argv[])
|
|
// {
|
|
// if(argc == 2)
|
|
// {
|
|
// if(strcmp(argv[1], "recv") == 0)
|
|
// {
|
|
// broadcast_recv();
|
|
// }
|
|
|
|
// if(strcmp(argv[1], "send") == 0)
|
|
// {
|
|
// broadcast_send();
|
|
// }
|
|
// }else
|
|
// {
|
|
// printf("\r\n");
|
|
// printf("########################################### \r\n");
|
|
// printf("Usage: %s [ recv | send ] \r\n", argv[0]);
|
|
// printf("e.g. : %s recv\r\n", argv[0]);
|
|
// printf("e.g. : %s send\r\n", argv[0]);
|
|
// printf("########################################### \r\n");
|
|
// }
|
|
|
|
// return 0;
|
|
// }
|
|
|
|
|