Пример #1
0
        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();
                    }
                }
            }
        }
Пример #2
0
        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();
                    }
                }
            }
        }