From 630e49571a4f0defd9801279f0a7a71003a2838b Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Sun, 18 Jun 2023 22:05:44 +0300 Subject: [PATCH] c AF_INET --- ~/C/AF_INET_sockets/echo_client.c | 38 ++++++++++++++++++++++++ ~/C/AF_INET_sockets/echo_server.c | 48 +++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 ~/C/AF_INET_sockets/echo_client.c create mode 100644 ~/C/AF_INET_sockets/echo_server.c diff --git a/~/C/AF_INET_sockets/echo_client.c b/~/C/AF_INET_sockets/echo_client.c new file mode 100644 index 0000000..111b11f --- /dev/null +++ b/~/C/AF_INET_sockets/echo_client.c @@ -0,0 +1,38 @@ +/* https://rsdn.org/article/unix/sockets.xml */ + +#include +#include +#include +#include +#include + +char message[] = "Hello there!\n"; +char buf[sizeof(message)]; + +int main() +{ + int sock; + struct sockaddr_in addr; + + sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock < 0) { + perror("socket"); + exit(1); + } + + addr.sin_family = AF_INET; + addr.sin_port = htons(3425); // или любой другой порт... + addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + perror("connect"); + exit(2); + } + + send(sock, message, sizeof(message), 0); + recv(sock, buf, sizeof(message), 0); + + printf(buf); + close(sock); + + return 0; +} diff --git a/~/C/AF_INET_sockets/echo_server.c b/~/C/AF_INET_sockets/echo_server.c new file mode 100644 index 0000000..a6e4a95 --- /dev/null +++ b/~/C/AF_INET_sockets/echo_server.c @@ -0,0 +1,48 @@ +/* https://rsdn.org/article/unix/sockets.xml */ + +#include +#include +#include +#include + +int main() +{ + int sock, listener; + struct sockaddr_in addr; + char buf[1024]; + int bytes_read; + + listener = socket(AF_INET, SOCK_STREAM, 0); + if (listener < 0) { + perror("socket"); + exit(1); + } + + addr.sin_family = AF_INET; + addr.sin_port = htons(3425); + addr.sin_addr.s_addr = htonl(INADDR_ANY); + if (bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + perror("bind"); + exit(2); + } + + listen(listener, 1); + + while(1) { + sock = accept(listener, NULL, NULL); + if (sock < 0) { + perror("accept"); + exit(3); + } + + while(1) { + bytes_read = recv(sock, buf, 1024, 0); + if (bytes_read <= 0) break; + send(sock, buf, bytes_read, 0); + } + + close(sock); + } + + return 0; +}