Skip to content

Instantly share code, notes, and snippets.

@be1

be1/net.c Secret

Last active May 29, 2021 10:50
Show Gist options
  • Save be1/7f4976207cb8e2c7faf96b3aa3de6dd8 to your computer and use it in GitHub Desktop.
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"
/* 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