代码之家  ›  专栏  ›  技术社区  ›  Ryan Ellis

使用localhost时不运行,并且不显示Websocket数据

  •  0
  • Ryan Ellis  · 技术社区  · 2 年前

    当运行此代码并安装自定义证书时;localhost仍处于启用状态,但没有一个网站正常工作。我做错了什么?我已经要求ChatGPT查看代码,他们做了一些调整,但它仍然不能正常工作。这是我的代码:

    
    using System;
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.Win32;
    using WebSocketSharp;
    using WebSocketSharp.Server;
    
    namespace WebSocketDecoder
    {
        public partial class Form1 : Form
        {
            private WebSocketServer _webSocketServer;
            private const string ProxyServerAddress = "localhost:8443";
    
            public Form1()
            {
                InitializeComponent();
                StartWebSocketProxy();
                EnableProxy();
            }
    
            private void StartWebSocketProxy()
            {
                try
                {
                    _webSocketServer = new WebSocketServer(IPAddress.Any, 8443, true);
                    _webSocketServer.SslConfiguration.ServerCertificate = new X509Certificate2("cert.pfx", "yourpassword");
                    _webSocketServer.SslConfiguration.ClientCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
    
                    _webSocketServer.AddWebSocketService<ProxyBehavior>("/BlueBox/websocket");
                    _webSocketServer.Start();
    
                    LogMessage("WebSocket proxy server started on wss://localhost:8443/BlueBox/websocket");
                }
                catch (Exception ex)
                {
                    LogMessage("Failed to start WebSocket proxy server: " + ex.Message);
                }
            }
    
            private void EnableProxy()
            {
                try
                {
                    RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
                    if (registry != null)
                    {
                        registry.SetValue("ProxyEnable", 1);
                        registry.SetValue("ProxyServer", ProxyServerAddress);
                        LogMessage("Proxy enabled: " + ProxyServerAddress);
                    }
                }
                catch (Exception ex)
                {
                    LogMessage("Failed to enable proxy: " + ex.Message);
                }
            }
    
            private void DisableProxy()
            {
                try
                {
                    RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
                    if (registry != null)
                    {
                        registry.SetValue("ProxyEnable", 0);
                        LogMessage("Proxy disabled.");
                    }
                }
                catch (Exception ex)
                {
                    LogMessage("Failed to disable proxy: " + ex.Message);
                }
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                DisableProxy();
                _webSocketServer.Stop();
                LogMessage("WebSocket proxy server stopped.");
            }
    
            public TextBox DecodedOutputTextBox => txtDecodedOutput;  // Expose the TextBox via a public property
    
            private void LogMessage(string message)
            {
                if (txtDecodedOutput.InvokeRequired)
                {
                    txtDecodedOutput.Invoke(new Action(() => LogMessage(message)));
                }
                else
                {
                    txtDecodedOutput.AppendText(message + Environment.NewLine);
                }
            }
        }
    
        public class ProxyBehavior : WebSocketBehavior
        {
            private WebSocket _client;
    
            protected override void OnOpen()
            {
                LogMessage("Connection opened with client.");
                try
                {
                    _client = new WebSocket("wss://prod-message1.wc.kixeye.com:8443/BlueBox/websocket");
                    _client.SslConfiguration.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
                    _client.OnOpen += (sender, e) => LogMessage("Connected to server.");
                    _client.OnMessage += (sender, e) =>
                    {
                        LogMessage("Message received from server.");
                        if (e.IsBinary)
                        {
                            var decodedMessage = ProcessDataByHeaderType(e.RawData);
                            LogMessage($"Decoded message: {decodedMessage}");
                            Program.MainForm.Invoke((MethodInvoker)(() => Program.MainForm.DecodedOutputTextBox.AppendText("Decoded message: " + decodedMessage + Environment.NewLine)));
                            Send(e.RawData); // Forward raw message to the browser
                        }
                        else
                        {
                            LogMessage("Received non-binary message from server.");
                        }
                    };
                    _client.OnError += (sender, e) => LogMessage("Error: " + e.Message);
                    _client.OnClose += (sender, e) => LogMessage("Disconnected from server.");
                    _client.Connect();
                }
                catch (Exception ex)
                {
                    LogMessage("Failed to connect to server: " + ex.Message);
                }
            }
    
            protected override void OnMessage(MessageEventArgs e)
            {
                LogMessage("Message received from client.");
                try
                {
                    _client.Send(e.RawData); // Forward message from browser to server
                }
                catch (Exception ex)
                {
                    LogMessage("Failed to send message to server: " + ex.Message);
                }
            }
    
            protected override void OnClose(CloseEventArgs e)
            {
                LogMessage("Connection closed.");
                _client.Close();
            }
    
            private string ProcessDataByHeaderType(byte[] buffer)
            {
                if (buffer.Length == 0)
                    return "Empty data";
    
                byte headerType = buffer[0];
                LogMessage($"Processing data with header type {headerType}");
    
                switch (headerType)
                {
                    case 1:
                        return DecodeType1(buffer);
                    case 2:
                        return DecodeType2(buffer);
                    default:
                        return "Unknown header type";
                }
            }
    
            private string DecodeType1(byte[] buffer)
            {
                if (buffer.Length < 3)
                    return "Invalid data for Type 1";
    
                ushort header = BitConverter.ToUInt16(buffer, 1);
                string payload = Encoding.UTF8.GetString(buffer, 3, buffer.Length - 3);
                return $"Type 1 - Header: {header}, Payload: {payload}";
            }
    
            private string DecodeType2(byte[] buffer)
            {
                if (buffer.Length < 5)
                    return "Invalid data for Type 2";
    
                int header = BitConverter.ToInt32(buffer, 1);
                string payload = Encoding.UTF8.GetString(buffer, 5, buffer.Length - 5);
                return $"Type 2 - Header: {header}, Payload: {payload}";
            }
    
            private void LogMessage(string message)
            {
                Program.MainForm.Invoke((MethodInvoker)(() => Program.MainForm.DecodedOutputTextBox.AppendText(message + Environment.NewLine)));
            }
        }
    }
    
    

    我没有任何线索,因为在Visual Studio中运行时没有发生实际错误。

    我不知道,因为Visual Studio中有0个错误。

    0 回复  |  直到 2 年前