From 0b33066281667920f5b235e71f67f64a8b2237a6 Mon Sep 17 00:00:00 2001
From: Peter Gerwinski <peter.gerwinski@hs-bochum.de>
Date: Wed, 9 Nov 2022 13:03:02 +0100
Subject: [PATCH] Notizen und Beispiele 9.11.2022

---
 20221109/es-20221109.txt    | 12 ++++++++
 20221109/tcpip-client-0.c   | 56 +++++++++++++++++++++++++++++++++++
 20221109/tcpip-client-1.cpp | 49 ++++++++++++++++++++++++++++++
 20221109/tcpip-server-0.c   | 59 +++++++++++++++++++++++++++++++++++++
 20221109/tcpip-server-1.cpp | 37 +++++++++++++++++++++++
 5 files changed, 213 insertions(+)
 create mode 100644 20221109/es-20221109.txt
 create mode 100644 20221109/tcpip-client-0.c
 create mode 100644 20221109/tcpip-client-1.cpp
 create mode 100644 20221109/tcpip-server-0.c
 create mode 100644 20221109/tcpip-server-1.cpp

diff --git a/20221109/es-20221109.txt b/20221109/es-20221109.txt
new file mode 100644
index 0000000..c38bd5e
--- /dev/null
+++ b/20221109/es-20221109.txt
@@ -0,0 +1,12 @@
+Hinweis zu Verschlüsselung: Firefox, Chrome, Safari, Opera, IE, Edge
+unterstützen bei HTTP/2 keine unverschlüsselten Verbindungen, HTTP/3
+ist nur für verschlüsselte Verbindungen definiert
+
+-----------------------------------------------------------------------
+
+streaming/usr/local/lib/pult# echo "vnc hide" | nc localhost 6076
+streaming/usr/local/lib/pult# echo "vnc show" | nc localhost 6076
+streaming/usr/local/lib/pult# echo "vnc max" | nc localhost 6076
+streaming/usr/local/lib/pult# echo "janus-1 max" | nc localhost 6076
+streaming/usr/local/lib/pult# echo "janus-1 min" | nc localhost 6076
+streaming/usr/local/lib/pult#
diff --git a/20221109/tcpip-client-0.c b/20221109/tcpip-client-0.c
new file mode 100644
index 0000000..6c6d6d8
--- /dev/null
+++ b/20221109/tcpip-client-0.c
@@ -0,0 +1,56 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+#define TARGET_HOST "ngc224.gerwinski.de"
+#define PORT 80
+#define COMMAND "GET /\r\n"
+
+void error (char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+  exit (1);
+}
+
+int main (void)
+{
+  int s;
+  struct sockaddr_in name;
+  if ((s = socket (PF_INET, SOCK_STREAM, 0)) < 0)
+    error ("cannot create socket");
+  memset (&name, 0, sizeof (name));
+  name.sin_family = AF_INET;
+  name.sin_port = htons (PORT);
+  name.sin_addr.s_addr = htonl (INADDR_ANY);
+  struct hostent *ho = gethostbyname (TARGET_HOST);
+  if (!ho)
+    {
+      close (s);
+      error ("name server lookup error");
+    }
+  if (ho->h_length > (int) sizeof (name.sin_addr))
+    ho->h_length = sizeof (name.sin_addr);
+  memcpy (&name.sin_addr, ho->h_addr, ho->h_length);
+  if (connect (s, (struct sockaddr *) &name, sizeof (name)) < 0)
+    {
+      close (s);
+      error ("cannot connect to socket");
+    }
+  send (s, COMMAND, strlen (COMMAND), 0);
+  ssize_t l;
+  do
+    {
+      char buffer[100];
+      l = recv (s, buffer, 100, 0);
+      if (l > 0)
+        write (1, buffer, l);
+    }
+  while (l > 0);
+  shutdown (s, SHUT_RDWR);
+  close (s);
+  return 0;
+}
diff --git a/20221109/tcpip-client-1.cpp b/20221109/tcpip-client-1.cpp
new file mode 100644
index 0000000..1847bca
--- /dev/null
+++ b/20221109/tcpip-client-1.cpp
@@ -0,0 +1,49 @@
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/write.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/ip/tcp.hpp>
+#include <array>
+#include <string>
+#include <iostream>
+
+using namespace boost::asio;
+using namespace boost::asio::ip;
+
+io_service ioservice;
+tcp::resolver resolv{ioservice};
+tcp::socket tcp_socket{ioservice};
+std::array<char, 4096> bytes;
+
+void read_handler(const boost::system::error_code &ec,
+  std::size_t bytes_transferred)
+{
+  if (!ec)
+  {
+    std::cout.write(bytes.data(), bytes_transferred);
+    tcp_socket.async_read_some(buffer(bytes), read_handler);
+  }
+}
+
+void connect_handler(const boost::system::error_code &ec)
+{
+  if (!ec)
+  {
+    std::string r = "GET /\r\n";
+    write(tcp_socket, buffer(r));
+    tcp_socket.async_read_some(buffer(bytes), read_handler);
+  }
+}
+
+void resolve_handler(const boost::system::error_code &ec,
+  tcp::resolver::iterator it)
+{
+  if (!ec)
+    tcp_socket.async_connect(*it, connect_handler);
+}
+
+int main()
+{
+  tcp::resolver::query q{"ngc224.gerwinski.de", "80"};
+  resolv.async_resolve(q, resolve_handler);
+  ioservice.run();
+}
diff --git a/20221109/tcpip-server-0.c b/20221109/tcpip-server-0.c
new file mode 100644
index 0000000..868993c
--- /dev/null
+++ b/20221109/tcpip-server-0.c
@@ -0,0 +1,59 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+#define PORT 1234
+#define MESSAGE "Hello, world!\n"
+
+void error (char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+  exit (1);
+}
+
+int main (void)
+{
+  int s;
+  struct sockaddr_in name;
+  if ((s = socket (PF_INET, SOCK_STREAM, 0)) < 0)
+    error ("cannot create socket");
+  memset (&name, 0, sizeof (name));
+  name.sin_family = AF_INET;
+  name.sin_port = htons (PORT);
+  name.sin_addr.s_addr = htonl (INADDR_ANY);
+  int on = 1;
+  setsockopt (s, SOL_SOCKET, SO_REUSEADDR, (void *) &on, sizeof (on));
+  if (bind (s, (struct sockaddr *) &name, sizeof (name)) < 0)
+    {
+      close (s);
+      error ("cannot bind socket");
+    }
+  if (listen (s, 16) < 0)
+    {
+      close (s);
+      error ("cannot listen on socket");
+    }
+  struct sockaddr_in clientname;
+  socklen_t size = sizeof (clientname);
+  s = accept (s, (struct sockaddr *) &clientname, &size);
+  if (s < 0)
+    error ("cannot accept connection");
+  char *host_address = inet_ntoa (clientname.sin_addr);
+  char *host_name;
+  struct hostent *hp = gethostbyaddr ((void *) &clientname.sin_addr, sizeof (clientname.sin_addr), clientname.sin_family);
+  if (hp)
+    host_name = hp->h_name;
+  else
+    host_name = inet_ntoa (clientname.sin_addr);
+  int remote_port = ntohs (clientname.sin_port);
+  printf ("connection from %s [%s], port %d\n",
+          host_name, host_address, remote_port);
+  send (s, MESSAGE, strlen (MESSAGE), 0);
+  shutdown (s, SHUT_RDWR);
+  close (s);
+  return 0;
+}
diff --git a/20221109/tcpip-server-1.cpp b/20221109/tcpip-server-1.cpp
new file mode 100644
index 0000000..b2059c1
--- /dev/null
+++ b/20221109/tcpip-server-1.cpp
@@ -0,0 +1,37 @@
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/write.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/ip/tcp.hpp>
+#include <string>
+
+using namespace boost::asio;
+using namespace boost::asio::ip;
+
+io_service ioservice;
+tcp::endpoint tcp_endpoint{tcp::v4(), 1234};
+tcp::acceptor tcp_acceptor{ioservice, tcp_endpoint};
+tcp::socket tcp_socket{ioservice};
+std::string data;
+
+void write_handler(const boost::system::error_code &ec,
+  std::size_t bytes_transferred)
+{
+  if (!ec)
+    tcp_socket.shutdown(tcp::socket::shutdown_send);
+}
+
+void accept_handler(const boost::system::error_code &ec)
+{
+  if (!ec)
+  {
+    std::string data = "Hello, world!\n";
+    async_write(tcp_socket, buffer(data), write_handler);
+  }
+}
+
+int main()
+{
+  tcp_acceptor.listen();
+  tcp_acceptor.async_accept(tcp_socket, accept_handler);
+  ioservice.run();
+}
-- 
GitLab