⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srvrsock.cs

📁 加进靣虽进碴是老大哥转暖厅叶杳时要加进嘲圆顶时进时进
💻 CS
📖 第 1 页 / 共 3 页
字号:
				if (localMachineInfo.AddressList.Length > 1 && Helper.IsHostDottedQuad(hostName)){
					for (int nLoopCnt = 0; nLoopCnt < localMachineInfo.AddressList.Length; nLoopCnt++){
						if (localMachineInfo.AddressList[nLoopCnt].ToString().Equals(hostName)){
							nHostAddressIndex = nLoopCnt;
							break;
						}
					}
				}
				myEndPoint = new IPEndPoint(localMachineInfo.AddressList[nHostAddressIndex], this._srcPort);
                OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("REDIR-SRVR>> Binding Port: {0} to IP Address {1}", this._srcPort, myEndPoint.Address.ToString())));
				this._sockRedir = new Socket(myEndPoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
				this._sockRedir.Bind(myEndPoint);
				this._sockRedir.Listen((int)SocketOptionName.MaxConnections);
                if (SrvrRedirectorSocket._StaticSockRedir != null) SrvrRedirectorSocket._StaticSockRedir.Close();
				SrvrRedirectorSocket._StaticSockRedir = this._sockRedir;
                OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("REDIR-SRVR>> Bound to port {0} of IP Address: {1}", this._srcPort, myEndPoint.Address.ToString())));
				_bRedirOk = true;
			}catch(SocketException sockEx){
				if (sockEx.NativeErrorCode == 10053 || sockEx.NativeErrorCode == 10054){
				}else{
					if (sockEx.NativeErrorCode == 10061){
                        OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("REDIR-SRVR>> Bound to port {0} of IP Address: {1}", this._srcPort, myEndPoint.Address.ToString())));
					}else{
                        OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("ERR>> Socket Exception @ InitServerSocket(...); #[{0}] Message: {1}", sockEx.NativeErrorCode, sockEx.Message)));
					}
				}
				_bRedirOk = false;
			}catch(Exception eX){
                OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("ERR> Exception @ InitServerSocket(...); Message: {0}", eX.Message)));
				_bRedirOk = false;
			}
		}
		#endregion

		#region CloseConnection Method
		public static void CloseConnection(ConnectionDetails connDets){
			try{
                connDets.ConnectionEnded = DateTime.Now;
				if (_bStatistics){
                    OnStatisticsEventHandler(new StatisticsEventArgs(string.Format("STA> {0} Bytes Received: {1}; Bytes Sent: {2}", connDets.ToString(), connDets.ConnectionBytesReceived.ToString("#,###,###,###,###"), connDets.ConnectionBytesSent.ToString("#,###,###,###,###"))));
                    TimeSpan difference = connDets.ConnectionEnded - connDets.ConnectionBegan;
                    long bytesSentPerSec = ((long)(connDets.ConnectionBytesSent / difference.TotalSeconds));
                    long bytesRecvdPerSec = ((long)(connDets.ConnectionBytesReceived / difference.TotalSeconds));
                    decimal kBytesSentPerSec = ((decimal)(bytesSentPerSec / 1024));
                    decimal kBytesRecvdPerSec = ((decimal)(bytesRecvdPerSec / 1024));
                    OnStatisticsEventHandler(new StatisticsEventArgs(string.Format("STA> {0} - Connection Uptime: {1} seconds\nSTA> Bytes Received/sec: {2} (KB/sec: {3})\nSTA> Bytes Sent/sec: {4} (KB/sec: {5})", connDets.ToString(), difference.TotalSeconds, bytesRecvdPerSec.ToString("#,###,###,###,###"), kBytesRecvdPerSec.ToString("#,###,###,##0.0000"), bytesSentPerSec.ToString("#,###,###,###,###"), kBytesSentPerSec.ToString("#,###,###,##0.0000"))));
                }
				OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("CON> {0} Closed on {1}.", connDets.ToString(), connDets.ConnectionEnded.ToString("dd/MM/yyyy HH:mm:ss"))));
                OnServerMessagesEventHandler(new ServerMessagesEventArgs("=> Goodbye. :)"));
                connDets.Dispose();
			}catch(SocketException sockEx){
                OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("ERR> Socket Exception @ CloseConnection(...); Message: {0}", sockEx.Message)));
			}catch(ObjectDisposedException){
			}catch(InvalidOperationException){
			}catch(Exception){
			}
		}
		#endregion

        #region OnServerMessagesEventHandler Method
        public static void OnServerMessagesEventHandler(ServerMessagesEventArgs e){
            if (ServerMessages != null){
                ServerMessages(null, e);
            }
        }
        #endregion

        #region OnStatisticsEventHandler Method
        public static void OnStatisticsEventHandler(StatisticsEventArgs e){
            if (Statistics != null){
                Statistics(null, e);
            }
        }
        #endregion

        #region OnServerDumpDataEventHandler Method
        public static void OnServerDumpDataEventHandler(ServerDumpDataEventArgs e){
            if (ServerDumpData != null){
                ServerDumpData(null, e);
            }
        }
        #endregion

        #region ShutDown Method
        public static void ShutDown(){
            try{
                if (_bRedirOk){
                    if (SrvrRedirectorSocket._StaticSockRedir != null){
                        SrvrRedirectorSocket._StaticSockRedir.Close();
                        OnServerMessagesEventHandler(new ServerMessagesEventArgs("REDIR-SRVR>> Traffic Redirector Shutdown."));
                        SrvrRedirectorSocket._StaticSockRedir = null;
                    }
                }
            }catch(System.Net.Sockets.SocketException sockEx){
                OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("ERR>> Socket Exception @ ShutDown(...); #[{0}] Message: {1}", sockEx.NativeErrorCode, sockEx.Message)));
                SrvrRedirectorSocket._StaticSockRedir = null;
            }catch(System.Exception){
            }
        }
        #endregion
	}
	#endregion

	#region Connection Class
	public class Connection{
		private Socket _sock; 
		private int _port = -1; 
		private string sHostName = string.Empty;
		private string sRedirectHost = string.Empty;
		private int _redirPort = -1;
        private bool _verboseFlag = false;
        private bool _doDump = false;

		#region Constructors
		#region Connection Constructor #1
		public Connection(Socket sock, int port, bool verboseFlag, bool doDump){
			this._sock = sock;
			this._port = port;
            this._verboseFlag = verboseFlag;
            this._doDump = doDump;
		}
		#endregion

		#region Connection Constructor #2
		public Connection(string hostName, int port){
			this.sHostName = hostName.ToLower();
			this._port = port;
		}
		#endregion
		#endregion

		#region TargetConnectionIPAddr Get/Set Accessor
		public string TargetConnectionIPAddr{
			get{ return this.sRedirectHost; }
			set{ this.sRedirectHost = value; }
		}
		#endregion

		#region TargetConnectionPort Get/Set Accessor
		public int TargetConnectionPort{
			get{ return this._redirPort; }
			set{ this._redirPort = value; }
		}
		#endregion

		#region cbHandleIncomingExternalConnection Asynchronous Method
		public void cbHandleIncomingExternalConnection(IAsyncResult result){
			ConnectionDetails conn = new ConnectionDetails();
            try{
                Socket s = (Socket)result.AsyncState;
                conn.ConnectionSocketExternal = s.EndAccept(result);
                conn.ConnectionExternalBuffer = new byte[SrvrRedirectorSocket._StaticBufferSize];
                conn.ConnectionInternalBuffer = new byte[SrvrRedirectorSocket._StaticBufferSize];
                conn.ConnectionBegan = DateTime.Now;
                SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("CON> {0} connected on {1}.", conn.ToString(), DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"))));
                if (conn.OpenInternalConnection(this.sRedirectHost, this._redirPort)){
                    conn.ConnectionSocketExternal.BeginReceive(conn.ConnectionExternalBuffer, 0, conn.ConnectionExternalBuffer.Length, SocketFlags.None, new AsyncCallback(this.cbHandleIncomingExternalTraffic), conn);
                    conn.ConnectionSocketInternal.BeginReceive(conn.ConnectionInternalBuffer, 0, conn.ConnectionInternalBuffer.Length, SocketFlags.None, new AsyncCallback(this.cbHandleIncomingInternalTraffic), conn);
                }else{
                    return;
                }
                SrvrRedirectorSocket._StaticSockRedir.BeginAccept(new AsyncCallback(this.cbHandleIncomingExternalConnection), result.AsyncState);
            }catch(SocketException sockEx){
                if (sockEx.NativeErrorCode == 10053 || sockEx.NativeErrorCode == 10054){
                    SrvrRedirectorSocket.CloseConnection(conn);
                }else{
                    SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("ERR> Socket Exception @ cbHandleIncomingConnection(...); Message: {0}", sockEx.Message)));
                }
            }catch(System.InvalidOperationException){
                SrvrRedirectorSocket.CloseConnection(conn);
            }catch(Exception){
				SrvrRedirectorSocket.CloseConnection(conn);
                SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("CON> {0} connected on {1} (UTC).", conn.ToString(), DateTime.Now.ToUniversalTime())));
			}
		}
		#endregion

		#region cbHandleIncomingExternalTraffic Asynchronous Method
		public void cbHandleIncomingExternalTraffic(IAsyncResult result){
			ConnectionDetails connDets = (ConnectionDetails)result.AsyncState;
			bool bConnTermd = false;
			try{
				int bytesRead = -1;
                try{
                    bytesRead = connDets.ConnectionSocketExternal.EndReceive(result);
                }catch(ObjectDisposedException){
                    bConnTermd = true;
                }catch(InvalidOperationException){
                    bConnTermd = true;
                }catch(Exception){
                    bConnTermd = true;
                }
				if (bConnTermd) return;
				if (connDets.ConnectionSocketExternal.Available == 0 && bytesRead == 0){
					SrvrRedirectorSocket.CloseConnection(connDets);
					return;
				}
				if (bytesRead != 0){
                    if (this._verboseFlag) SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("RCV> [srcIPAddr] <{0}---- {1} Bytes ----= [{2}]", '{', bytesRead, connDets.ConnectionSocketExternal.RemoteEndPoint.ToString())));
                    connDets.ConnectionBytesReceived += bytesRead;
                    if (this._doDump){
                        Helper.DumpBytes(connDets.ConnectionExternalBuffer, connDets.ConnectionSocketExternal.RemoteEndPoint.ToString(), bytesRead);
                    }
					connDets.ConnectionSocketInternal.Send(connDets.ConnectionExternalBuffer, 0, bytesRead, SocketFlags.None);
                    if (this._verboseFlag) SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("SNT> [srcIPAddr] =---- {0} Bytes ----{1}> [dstIPAddr]", bytesRead, '}')));
					connDets.ConnectionSocketExternal.BeginReceive(connDets.ConnectionExternalBuffer, 0, connDets.ConnectionExternalBuffer.Length, SocketFlags.None, new AsyncCallback(this.cbHandleIncomingExternalTraffic), connDets);
				}
			}catch(SocketException sockEx){
				if (sockEx.NativeErrorCode == 10053 || sockEx.NativeErrorCode == 10054){
					SrvrRedirectorSocket.CloseConnection(connDets);
				}else{
					SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("ERR> Socket Exception @ cbHandleIncomingExternalTraffic(...); Message: {0}", sockEx.Message)));
				}
			}catch(ObjectDisposedException){
			}catch(Exception eX){
				SrvrRedirectorSocket.CloseConnection(connDets);
                SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("ERR> Exception @ cbHandleIncomingExternalTraffic(...); Message: {0}", eX.Message)));
			}
		}
		#endregion

		#region cbHandleIncomingInternalTraffic Asynchronous Method
		public void cbHandleIncomingInternalTraffic(IAsyncResult result){
			ConnectionDetails connDets = (ConnectionDetails)result.AsyncState;
			bool bConnTermd = false;
			try{
				int bytesRead = -1;
				try{
					bytesRead = connDets.ConnectionSocketInternal.EndReceive(result);
				}catch(ObjectDisposedException){
					bConnTermd = true;
				}
				if (bConnTermd) return;
				if (connDets.ConnectionSocketInternal.Available == 0 && bytesRead == 0){
					return;
				}
				if (bytesRead != 0){
                    if (this._verboseFlag) SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("RCV> [srcIPAddr] <{0}---- {1} Bytes ----= [dstIPAddr]", '{', bytesRead)));
					connDets.ConnectionSocketExternal.Send(connDets.ConnectionInternalBuffer, 0, bytesRead, SocketFlags.None);
                    if (this._verboseFlag) SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("SNT> [srcIPAddr] =---- {0} Bytes ---{1}> [{2}]", bytesRead, '}', connDets.ConnectionSocketExternal.RemoteEndPoint.ToString())));
                    if (this._doDump){
                        Helper.DumpBytes(connDets.ConnectionInternalBuffer, connDets.ConnectionSocketInternal.RemoteEndPoint.ToString(), bytesRead);
                    }
                    connDets.ConnectionBytesSent += bytesRead;
					connDets.ConnectionSocketInternal.BeginReceive(connDets.ConnectionInternalBuffer, 0, connDets.ConnectionInternalBuffer.Length, SocketFlags.None, new AsyncCallback(this.cbHandleIncomingInternalTraffic), connDets);
				}
			}catch(SocketException sockEx){
				if (sockEx.NativeErrorCode == 10053 || sockEx.NativeErrorCode == 10054){
					SrvrRedirectorSocket.CloseConnection(connDets);
				}else{
                    SrvrRedirectorSocket.OnServerMessagesEventHandler(new ServerMessagesEventArgs(string.Format("ERR> Socket Exception @ cbHandleIncomingTrafficServer(...); Message: {0}", sockEx.Message)));
				}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -