/// <summary> /// 清理 /// </summary> void close() { if (Tcp_Client != null) { try { Program.PrintLog(string.Format("已断开客户端{0}的连接", Tcp_Client.Client.RemoteEndPoint)); Client_Stream.Close(); Tcp_Client.Close(); Tcp_Client = null; } catch (NullReferenceException) { } } if (Tcp_Proxy != null) { try { Program.PrintLog(string.Format("已断开代理端{0}的连接", Tcp_Proxy.Client.RemoteEndPoint)); Proxy_Stream.Close(); Tcp_Proxy.Close(); Tcp_Proxy = null; } catch (NullReferenceException) { } } }
public TCP_Server(TcpClient Tcp_Client, TcpClient Tcp_Proxy) { try { TCP_Proxy = Tcp_Proxy; TCP_Client = Tcp_Client; Client_Stream = TCP_Client.GetStream(); Proxy_Stream = TCP_Proxy.GetStream(); Client_Stream.BeginRead(Client_Data, 0, Data_Size, TCP_Client_Receive, null); Proxy_Stream.BeginRead(Proxy_Data, 0, Data_Size, TCP_Proxy_Receive, null); DataHandle.WriteLog($"开启对{TCP_Client.Client.RemoteEndPoint}的TCP代理隧道"); } catch (SocketException) { close(); } }
/// <summary> /// 代理端接收数据回调 /// </summary> /// <param name="ar"></param> private void Proxy_Receive(IAsyncResult ar) { try { int Size = Proxy_Stream.EndRead(ar); if (Size > 0) { Socks_Send(Client_Stream, Proxy_Data.Take(Size).ToArray()); Proxy_Stream.BeginRead(Proxy_Data, 0, Data_Size, P_Read_Delegate, null); } else { close(); } } catch { close(); } }
public Socks_Server(TcpClient TcpClient, TcpClient TcpProxy) { try { Client_Data = new byte[Data_Size]; Proxy_Data = new byte[Data_Size]; Tcp_Proxy = TcpProxy; Tcp_Client = TcpClient; Client_Stream = Tcp_Client.GetStream(); Proxy_Stream = Tcp_Proxy.GetStream(); dataHandle = new DataHandle(); C_Read_Delegate = new AsyncCallback(Client_Receive); P_Read_Delegate = new AsyncCallback(Proxy_Receive); Client_Stream.BeginRead(Client_Data, 0, Data_Size, C_Read_Delegate, null); Proxy_Stream.BeginRead(Proxy_Data, 0, Data_Size, P_Read_Delegate, null); } catch (SocketException) { close(); } }
/// <summary> /// 代理端接收数据回调 /// </summary> /// <param name="ar"></param> private void TCP_Proxy_Receive(IAsyncResult ar) { try { byte[] Data = DataHandle.En_Bytes(Proxy_Data.Take(Proxy_Stream.EndRead(ar)).ToArray()); if (Data.Length > 0) { TCP_Socks_Send(Client_Stream, Data); Proxy_Stream.BeginRead(Proxy_Data, 0, Data_Size, TCP_Proxy_Receive, null); } else { close(); } } catch { close(); } }
public TCP_Server(TcpClient Tcp_Client, TcpClient Tcp_Proxy) { try { Client_Data = new byte[Data_Size]; Proxy_Data = new byte[Data_Size]; TCP_Proxy = Tcp_Proxy; TCP_Client = Tcp_Client; Client_Stream = TCP_Client.GetStream(); Proxy_Stream = TCP_Proxy.GetStream(); C_Read_Delegate = new AsyncCallback(TCP_Client_Receive); P_Read_Delegate = new AsyncCallback(TCP_Proxy_Receive); Client_Stream.BeginRead(Client_Data, 0, Data_Size, C_Read_Delegate, null); Proxy_Stream.BeginRead(Proxy_Data, 0, Data_Size, P_Read_Delegate, null); DataHandle.WriteLog(string.Format("开启对{0}的TCP代理隧道", TCP_Client.Client.RemoteEndPoint)); } catch (SocketException) { close(); } }
/// <summary> /// TCP清理 /// </summary> private void close() { try { if (TCP_Client != null) { DataHandle.WriteLog(string.Format("已断开客户端{0}的连接", TCP_Client.Client.RemoteEndPoint)); Client_Stream.Close(); TCP_Client.Close(); TCP_Client = null; } if (TCP_Proxy != null) { DataHandle.WriteLog(string.Format("已断开代理端{0}的连接", TCP_Proxy.Client.RemoteEndPoint)); Proxy_Stream.Close(); TCP_Proxy.Close(); TCP_Proxy = null; } } catch (Exception) { } }