yyl
2026-05-07 01b5728a890315e4dbe9aabf7225a7957171e1a5
Main/Core/NetworkPackage/Socket/ClientSocket.cs
@@ -76,11 +76,13 @@
    public void Connect(string _ip, int _port, Action<bool> _onConnected)
    {
        Debug.unityLogger.logEnabled = true;
        try
        {
            ip = _ip;
            port = _port;
            onConnected = _onConnected;
            Debug.Log($"[ClientSocket][Connect] 尝试连接: ip={_ip}, port={_port}");
            //目前测试到异步两个问题
            // 1. BeginGetHostAddresses 不明情况下会很久才回调,导致触发超时
            // 2. 超时的情况下多次尝试登录后,会触发多次OnGetHostAddresses,导致登录异常
@@ -96,29 +98,29 @@
            ipAddress = ipAddresses[0];
#endif
            Debug.Log($"[ClientSocket][Connect] 解析到ipAddress={ipAddress}, family={ipAddress.AddressFamily}");
            if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6)
            {
                Debug.Log("当前使用的网络: IPV6");
                Debug.Log("[ClientSocket][Connect] 当前使用的网络: IPV6");
                m_Socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
            }
            else
            {
                Debug.Log("当前使用的网络: IPV4");
                Debug.Log("[ClientSocket][Connect] 当前使用的网络: IPV4");
                m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            }
            var ipEndPoint = new IPEndPoint(ipAddress, port);
            if (ipEndPoint == null)
            {
                Debug.Log("IpEndPoint is null");
                Debug.LogError("[ClientSocket][Connect] IpEndPoint is null");
            }
            m_Socket.BeginConnect(ipEndPoint, new AsyncCallback(ConnectCallBack), null);
        }
        catch (Exception e)
        {
            Debug.LogError(e.Message);
            Debug.LogError($"[ClientSocket][Connect] 异常: {e.Message}");
        }
@@ -154,12 +156,14 @@
    /// <param name="_result"></param>
    private void ConnectCallBack(IAsyncResult _result)
    {
        Debug.unityLogger.logEnabled = true;
        if (!_result.IsCompleted)
        {
            Debug.Log("链接超时!");
            Debug.LogError("[ClientSocket][ConnectCallBack] 链接超时!");
            CloseConnect();
            if (onConnected != null)
            {
                Debug.LogError("[ClientSocket][ConnectCallBack] onConnected(false) 超时");
                onConnected(false);
                onConnected = null;
            }
@@ -170,11 +174,12 @@
            {
                if (m_Socket != null && m_Socket.Connected)
                {
                    Debug.Log("确认的链接实现");
                    Debug.Log("[ClientSocket][ConnectCallBack] 确认的链接实现");
                    OnConnectSuccess();
                }
                else
                {
                    Debug.LogError("[ClientSocket][ConnectCallBack] m_Socket为null或未连接");
                    if (m_Socket != null)
                    {
                        m_Socket.Disconnect(true);
@@ -183,12 +188,13 @@
            }
            catch (System.Exception ex)
            {
                Debug.Log(ex);
                Debug.LogError($"[ClientSocket][ConnectCallBack] 异常: {ex}");
            }
            finally
            {
                if (onConnected != null)
                {
                    Debug.Log($"[ClientSocket][ConnectCallBack] onConnected({{0}})", m_Socket != null && m_Socket.Connected);
                    onConnected(m_Socket != null && m_Socket.Connected);
                    onConnected = null;
                }
@@ -205,6 +211,8 @@
    public void CloseConnect()
    {
        Debug.Log("==== CloseConnect");
        Debug.unityLogger.logEnabled = true;
        Debug.Log("[ClientSocket][CloseConnect] ==== CloseConnect");
        try
        {
            isStopTreading = true;
@@ -242,6 +250,20 @@
    {
        if (m_packageThread != null)
        {
            m_packageThread.Abort();
            m_packageThread = null;
        }
        m_LastPackageTime = DateTime.Now;
        m_packageThread = new Thread(new ThreadStart(ReceiveInfo)); // 启动线程接收信息
        m_packageThread.IsBackground = true;
        m_packageThread.Start();
        isStopTreading = false;
        Debug.unityLogger.logEnabled = true;
        Debug.Log("[ClientSocket][OnConnectSuccess] 连接成功,启动接收线程");
        if (m_packageThread != null)
        {
            Debug.LogWarning("[ClientSocket][OnConnectSuccess] m_packageThread已存在,先Abort");
            m_packageThread.Abort();
            m_packageThread = null;
        }
@@ -296,6 +318,51 @@
                Debug.Log(e);
            }
        }
        Debug.unityLogger.logEnabled = true;
        Debug.Log("[ClientSocket][ReceiveInfo] 接收线程启动");
        while (!isStopTreading)
        {
            try
            {
                var shutdown = false;
                if (!m_Socket.Connected)
                {
                    Debug.LogWarning("[ClientSocket][ReceiveInfo] m_Socket 已断开");
                    shutdown = true;
                }
                if (!shutdown)
                {
                    var dataLength = m_Socket.Receive(bufferBytes);
                    Debug.Log($"[ClientSocket][ReceiveInfo] 收到数据长度: {dataLength}");
                    if (dataLength <= 0)
                    {
                        Debug.LogWarning("[ClientSocket][ReceiveInfo] dataLength <= 0,准备断开");
                        shutdown = true;
                    }
                    else
                    {
                        getBytesTotal += dataLength;
                        var bytes = new byte[dataLength];
                        Array.Copy(bufferBytes, 0, bytes, 0, dataLength);
                        ReadInfo(bytes);
                    }
                }
                if (shutdown)
                {
                    Debug.LogWarning("[ClientSocket][ReceiveInfo] shutdown=true,关闭Socket");
                    isStopTreading = true;
                    m_Socket.Shutdown(SocketShutdown.Both);
                    m_Socket.Close();
                }
            }
            catch (Exception e)
            {
                Debug.LogError($"[ClientSocket][ReceiveInfo] 异常: {e}");
            }
        }
        Debug.Log("[ClientSocket][ReceiveInfo] 接收线程退出");
    }
@@ -312,6 +379,7 @@
            if (fragmentBytes != null && fragmentBytes.Length > 0)
            {
                Array.Resize(ref fixBytes, vBytes.Length + fragmentBytes.Length);
                Debug.Log($"[ClientSocket][ReadInfo] 存在fragmentBytes, 长度: {fragmentBytes.Length}");
                Array.Copy(fragmentBytes, 0, fixBytes, 0, fragmentBytes.Length);
                Array.Copy(vBytes, 0, fixBytes, fragmentBytes.Length, vBytes.Length);
            }
@@ -439,6 +507,7 @@
    
    public async void Connect(string _ip, int _port, Action<bool> _onConnected)
    {
        Debug.unityLogger.logEnabled = true;
        ip = _ip;
        port = _port;
        onConnected = _onConnected;
@@ -597,7 +666,7 @@
    
    public async void CloseConnect()
    {
        Debug.Log("[ClientSocket-WebSocket] ==== CloseConnect");
        Debug.Log("[ClientSocket-WebSocket] ==== CloseConnect\n" + System.Environment.StackTrace);
        fragmentBytes = null;
        
        if (webSocket != null)