[点晴永久免费OA]c# 实现端口转发可以用来实现远程桌面连接内网主机
					当前位置:点晴教程→点晴OA办公管理信息系统
					
					→『 经验分享&问题答疑 』
					
				 
				
 gYP.Start()方法调用后填写一台公网主机ip和端口(11111)然后公网主机用lcx转发11111到22222端口,远程桌面在公网主机连自己(127.0.0.1:22222)的22222端口就可以了可能需要点2次连接。 
			protected void wDZ(object sender, EventArgs e)         {             if (iXdh.Text == "" || eEpm.Text.Length < 7 || ZHS.Text == "") return;             PortForward gYP = new PortForward();             gYP.Start(llH.Text, int.Parse(ZHS.Text), eEpm.Text, int.Parse(iXdh.Text));                   }         protected void vJNsE(object sender, EventArgs e)         {             PortForward gYP = new PortForward();             gYP.lyTOK();         }         protected void tYoZ(object sender, EventArgs e)         {         }     }     public class PortForward     {         public string Localaddress;         public int LocalPort;         public string RemoteAddress;         public int RemotePort;         string type;         Socket ltcpClient;         Socket rtcpClient;         Socket server;         byte[] DPrPL = new byte[2048];         byte[] wvZv = new byte[2048];         public struct session         {             public Socket rdel;             public Socket ldel;             public int llen;             public int rlen;         }         public static IPEndPoint mtJ(string host, int port)         {             IPEndPoint iep = null;             IPHostEntry aGN = Dns.Resolve(host);             IPAddress rmt = aGN.AddressList[0];             iep = new IPEndPoint(rmt, port);             return iep;         }         public void Start(string Rip, int Rport, string lip, int lport)         {             try             {                 LocalPort = lport;                 RemoteAddress = Rip;                 RemotePort = Rport;                 Localaddress = lip;                 rtcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                 ltcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                 rtcpClient.BeginConnect(mtJ(RemoteAddress, RemotePort), new AsyncCallback(iiGFO), rtcpClient);             }             catch (Exception ex) { }         }         protected void iiGFO(IAsyncResult ar)         {             try             {                 session RKXy = new session();                 RKXy.ldel = ltcpClient;                 RKXy.rdel = rtcpClient;                 ltcpClient.BeginConnect(mtJ(Localaddress, LocalPort), new AsyncCallback(VTp), RKXy);             }             catch (Exception ex) { }         }         protected void VTp(IAsyncResult ar)         {             try             {                 session RKXy = (session)ar.AsyncState;                 ltcpClient.EndConnect(ar);                 RKXy.rdel.BeginReceive(DPrPL, 0, DPrPL.Length, SocketFlags.None, new AsyncCallback(LFYM), RKXy);                 RKXy.ldel.BeginReceive(wvZv, 0, wvZv.Length, SocketFlags.None, new AsyncCallback(xPS), RKXy);             }             catch (Exception ex) { }         }         private void LFYM(IAsyncResult ar)         {             try             {                 session RKXy = (session)ar.AsyncState;                 int Ret = RKXy.rdel.EndReceive(ar);                 if (Ret > 0)                     ltcpClient.BeginSend(DPrPL, 0, Ret, SocketFlags.None, new AsyncCallback(JTcp), RKXy);                 else lyTOK();             }             catch (Exception ex) { }         }         private void JTcp(IAsyncResult ar)         {             try             {                 session RKXy = (session)ar.AsyncState;                 RKXy.ldel.EndSend(ar);                 RKXy.rdel.BeginReceive(DPrPL, 0, DPrPL.Length, SocketFlags.None, new AsyncCallback(this.LFYM), RKXy);             }             catch (Exception ex) { }         }         private void xPS(IAsyncResult ar)         {             try             {                 session RKXy = (session)ar.AsyncState;                 int Ret = RKXy.ldel.EndReceive(ar);                 if (Ret > 0)                     RKXy.rdel.BeginSend(wvZv, 0, Ret, SocketFlags.None, new AsyncCallback(IZU), RKXy);                 else lyTOK();             }             catch (Exception ex) { }         }         private void IZU(IAsyncResult ar)         {             try             {                 session RKXy = (session)ar.AsyncState;                 RKXy.rdel.EndSend(ar);                 RKXy.ldel.BeginReceive(wvZv, 0, wvZv.Length, SocketFlags.None, new AsyncCallback(this.xPS), RKXy);             }             catch (Exception ex) { }         }         public void lyTOK()         {             try             {                 if (ltcpClient != null)                 {                     ltcpClient.Close();                 }                 if (rtcpClient != null)                     rtcpClient.Close();             }             catch (Exception ex) { }         }     } } 该文章在 2019/6/27 11:53:18 编辑过  | 
		
			 关键字查询 
				相关文章 
				正在查询...  |