-
-
Save be1/7f4976207cb8e2c7faf96b3aa3de6dd8 to your computer and use it in GitHub Desktop.
A reply to stackoverflow #67718153: "Bool array transfer from server with UDP in C"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* in reply to https://stackoverflow.com/questions/67718153/bool-array-transfer-from-server-with-udp-in-c */ | |
/* compile: cc net.c -o net */ | |
/* run (twice): ./net & ./net 127.0.0.1 */ | |
#include <stdbool.h> | |
#include <unistd.h> | |
#include <stdio.h> | |
#include <string.h> | |
#include <netdb.h> | |
#include <stdlib.h> | |
#include <sys/types.h> | |
#include <sys/socket.h> | |
int main(int argc, char** argv){ | |
int sock; | |
struct sockaddr_in addr; | |
socklen_t addrlen; | |
struct hostent* peer; | |
char netbuf [512]; /* use 8bit cell to store a boolean, for convenience */ | |
sock = socket(PF_INET, SOCK_DGRAM, 0); | |
addrlen = sizeof(addr); | |
memset(&addr, 0, addrlen); | |
addr.sin_family = PF_INET; | |
addr.sin_port = htons(5000); | |
if (argc == 1) { | |
bind(sock,(struct sockaddr*)&addr,addrlen); | |
addr.sin_addr.s_addr = htonl(INADDR_ANY); | |
recvfrom(sock, netbuf, sizeof(netbuf), 0, | |
(struct sockaddr*)&addr, &addrlen); | |
for (int i = 0; i < 512; i++) { | |
printf("%d, ", netbuf[i] ? 1 : 0); | |
} | |
printf("\n"); | |
sendto(sock, "ok", sizeof("ok"), 0, | |
(struct sockaddr*)&addr, addrlen); | |
} else { | |
peer = gethostbyname(argv[1]); | |
memmove(&addr.sin_addr.s_addr, | |
peer->h_addr,peer->h_length); | |
#if 0 | |
/* no need to connect with UDP */ | |
connect(sock, (struct sockaddr*)&addr, addrlen); | |
#endif | |
for (int i = 0; i < 512; i++) { | |
/* alternate true and false */ | |
netbuf[i] = i % 2; | |
} | |
sendto(sock, netbuf, 512, 0, | |
(struct sockaddr*)&addr, addrlen); | |
recvfrom(sock, netbuf, sizeof(netbuf), 0, | |
(struct sockaddr*)&addr, &addrlen); | |
printf("%s\n", netbuf); | |
} | |
close(sock); | |
exit(EXIT_SUCCESS); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment