summaryrefslogtreecommitdiff
path: root/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'client.c')
-rw-r--r--client.c41
1 files changed, 30 insertions, 11 deletions
diff --git a/client.c b/client.c
index 007bf2d..8f4d5ff 100644
--- a/client.c
+++ b/client.c
@@ -3,17 +3,21 @@
#include <netinet/in.h>
#include <stdbool.h>
#include <stdint.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
+static unsigned char udp_buffer[UINT16_MAX];
+
static inline bool IsDigit(char c) { return c >= '0' && c <= '9'; }
-static unsigned ParseAddress(char const *str, FILE *log_stream)
+static uint32_t ParseAddress(char const *str, FILE *log_stream)
{
- unsigned addr = 0, byte_counter = 0, byte = 0, digits_counter = 0;
+ uint32_t addr = 0;
+ unsigned byte_counter = 0, byte = 0, digits_counter = 0;
for (size_t i = 0;; i++) {
char const c = str[i];
if (c == '\0') {
@@ -74,7 +78,7 @@ int main(int const argc, char *const argv[])
}
int const port = atoi(argv[2]);
if (port <= 0 || port > UINT16_MAX) {
- fprintf(stderr, "Invalid port specifed\n");
+ fprintf(stderr, "Invalid port specified\n");
return 1;
}
int const fd = socket(AF_INET, SOCK_DGRAM, 0);
@@ -87,14 +91,29 @@ int main(int const argc, char *const argv[])
.sin_port = htons(port),
.sin_addr.s_addr = htonl(addr),
};
- for (int i = 0; i < 4; i++) {
- ssize_t const ret = sendto(
- fd, "hello", 5, 0, (struct sockaddr const *)&serveraddr, sizeof(serveraddr));
- if (ret < 0) {
- perror("sendto failed");
- break;
- }
- printf("message sent\n");
+ ssize_t const ret = sendto(
+ fd, "\x2a", 1, 0, (struct sockaddr const *)&serveraddr, sizeof(serveraddr));
+ if (ret < 0) {
+ perror("sendto failed");
+ return 1;
}
+ printf("message sent\n");
+ struct sockaddr_in source_address;
+ socklen_t source_address_len = sizeof(source_address);
+ int const length = recvfrom(
+ fd,
+ udp_buffer,
+ sizeof(udp_buffer) - 1,
+ 0,
+ (struct sockaddr*)&source_address,
+ &source_address_len);
+ (void) length;
+ uint32_t const addr2 = ntohl(source_address.sin_addr.s_addr);
+ uint8_t const a0 = addr2 >> 24;
+ uint8_t const a1 = addr2 >> 16;
+ uint8_t const a2 = addr2 >> 8;
+ uint8_t const a3 = addr2;
+ uint16_t const port2 = ntohs(source_address.sin_port);
+ printf("Received: %u from %u.%u.%u.%u:%u\n", udp_buffer[0], a0, a1, a2, a3, port2);
close(fd);
}