public static void Main() { NetworkStream netStream = null; Socket listenerSocket = null; CertificateManager.AddCaCertificateBundle(testCACertificate); // server certificate // make sure to add a correct PEM encoded certificate, including the RSA key X509Certificate2 serverCert = new X509Certificate2(serverTestCertificate, serverTestCertificateKey, ""); NetworkHelpers.SetupAndConnectNetwork(true); Debug.WriteLine("Waiting for network up and IP address..."); NetworkHelpers.IpAddressAvailable.WaitOne(); Debug.WriteLine("Waiting for valid Date & Time..."); NetworkHelpers.DateTimeAvailable.WaitOne(); Debug.WriteLine("Setting up socket..."); using (Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IPv4)) { // create a local IPEndPoint IPEndPoint ep = new IPEndPoint(0, 443); Debug.WriteLine("Listen to connections..."); // bind socket to local endpoint mySocket.Bind(ep); // wait for connection mySocket.Listen(1); listenerSocket = mySocket.Accept(); try { // Once connection established need to create secure stream and authenticate server. netStream = new SslStream(listenerSocket); // Throws exception if this fails // pass the server certificate // do not require client certificate ((SslStream)netStream).AuthenticateAsServer(serverCert, false, SslProtocols.Tls11); // setup buffer to read data from socket byte[] buffer = new byte[1024]; // trying to read from socket int bytes = netStream.Read(buffer, 0, buffer.Length); Debug.WriteLine($"Read {bytes} bytes"); if (bytes > 0) { // we have data! // output as string Debug.WriteLine(new string(Encoding.UTF8.GetChars(buffer))); } } catch { } finally { if (netStream != null) { netStream.Close(); listenerSocket.Close(); } } } }
public static void Main() { NetworkStream netStream = null; Socket listenerSocket = null; CertificateManager.AddCaCertificateBundle(testCACertificate); // server certificate // make sure to add a correct PEM encoded certificate, including the RSA key X509Certificate2 serverCert = new X509Certificate2(serverTestCertificate, serverTestCertificateKey, ""); Debug.WriteLine("Waiting for network up and IP address..."); bool success; CancellationTokenSource cs = new(60000); #if BUILD_FOR_ESP32 success = NetworkHelper.ConnectWifiDhcp(MySsid, MyPassword, setDateTime: true, token: cs.Token); #else success = NetworkHelper.WaitForValidIPAndDate(true, System.Net.NetworkInformation.NetworkInterfaceType.Ethernet, cs.Token); #endif if (!success) { Debug.WriteLine($"Can't get a proper IP address and DateTime, error: {NetworkHelper.ConnectionError.Error}."); if (NetworkHelper.ConnectionError.Exception != null) { Debug.WriteLine($"Exception: {NetworkHelper.ConnectionError.Exception}"); } return; } Debug.WriteLine("Setting up socket..."); using (Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IPv4)) { // create a local IPEndPoint IPEndPoint ep = new IPEndPoint(0, 443); Debug.WriteLine("Listen to connections..."); // bind socket to local endpoint mySocket.Bind(ep); // wait for connection mySocket.Listen(1); listenerSocket = mySocket.Accept(); try { // Once connection established need to create secure stream and authenticate server. netStream = new SslStream(listenerSocket); /////////////////////////////////////////////////////////////////////////////////// // Using a server certificate stored in the device is possible by // setting the UseStoredDeviceCertificate property. // // In practice it's equivalent to providing a server certificate in // the 'serverCertificate' parameter when calling AuthenticateAsServer(...) // /////////////////////////////////////////////////////////////////////////////////// ((SslStream)netStream).UseStoredDeviceCertificate = true; // Throws exception if this fails // pass the server certificate // do not require client certificate ((SslStream)netStream).AuthenticateAsServer(serverCert, false, SslProtocols.Tls11); // setup buffer to read data from socket byte[] buffer = new byte[1024]; // trying to read from socket int bytes = netStream.Read(buffer, 0, buffer.Length); Debug.WriteLine($"Read {bytes} bytes"); if (bytes > 0) { // we have data! // output as string Debug.WriteLine(new string(Encoding.UTF8.GetChars(buffer))); } } catch { } finally { if (netStream != null) { netStream.Close(); listenerSocket.Close(); } } } }