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];
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD> UDP <20><EFBFBD><D7BD><EFBFBD>
|
|||
|
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
|||
|
if (sockfd < 0) {
|
|||
|
perror("socket creation failed");
|
|||
|
exit(EXIT_FAILURE);
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD>Ϊ<EFBFBD>㲥ģʽ
|
|||
|
int broadcast = 1;
|
|||
|
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)) < 0) {
|
|||
|
perror("setsockopt failed");
|
|||
|
close(sockfd);
|
|||
|
exit(EXIT_FAILURE);
|
|||
|
}
|
|||
|
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
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);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
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);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
|
|||
|
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;
|
|||
|
// }
|
|||
|
|
|||
|
|