国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#端口轉發用法詳解

2020-01-24 02:07:26
字體:
來源:轉載
供稿:網友

本文實例講述了C#端口轉發用法。分享給大家供大家參考。具體分析如下:

這里以鏈接3389的時候為例

例子1:連接a機器的3389端口連不上,因為對方防火墻或者網關做了限制,只能訪問a機器的個別端口比如80。

例子2:連接a機器的幾乎所有端口都連不上(對方乃內網或者防火墻網關做了限制),只能1433上去,但是對方可以連接你的某些端口。

解決方法:

第一種較簡單,只需要程序在對方開80,你連接他80,程序收到數據后,發送到他本機的3389,同時從他3389收到數據后返回到你。程序就是一個中轉站。

using System;using System.Net.Sockets;using System.Threading;namespace PortTransponder{  class Program  {    static void Main(string[] args)    {      TcpListener tl = new TcpListener(80);//這里開對方可以被你連接并且未被占用的端口      tl.Start();      while (true)//這里必須用循環,可以接收不止一個客戶//因為我發現終端服務有時一個端口不行就換一個端口重連      {//下面的意思就是一旦程序收到你發送的數據包后立刻開2個線程做中轉        try        {          TcpClient tc1 = tl.AcceptTcpClient();//這里是等待數據再執行下邊,不會100%占用cpu          TcpClient tc2 = new TcpClient("localhost", 3389);          tc1.SendTimeout = 300000;//設定超時,否則端口將一直被占用,即使失去連接          tc1.ReceiveTimeout = 300000;          tc2.SendTimeout = 300000;          tc2.ReceiveTimeout = 300000;          object obj1 = (object)(new TcpClient[] { tc1, tc2 });          object obj2 = (object)(new TcpClient[] { tc2, tc1 });          ThreadPool.QueueUserWorkItem(new WaitCallback(transfer), obj1);          ThreadPool.QueueUserWorkItem(new WaitCallback(transfer), obj2);        }        catch { }      }    }    public static void transfer(object obj)    {      TcpClient tc1 = ((TcpClient[])obj)[0];      TcpClient tc2 = ((TcpClient[])obj)[1];      NetworkStream ns1 = tc1.GetStream();      NetworkStream ns2 = tc2.GetStream();      while (true)      {        try        {//這里必須try catch,否則連接一旦中斷程序就崩潰了//要是彈出錯誤提示讓機主看見那就

主站蜘蛛池模板:
左权县|
平泉县|
隆安县|
扶绥县|
宕昌县|
固镇县|
日喀则市|
富蕴县|
龙岩市|
红安县|
内乡县|
青阳县|
霍林郭勒市|
昌乐县|
湛江市|
荥阳市|
临安市|
漠河县|
延庆县|
怀宁县|
宣威市|
莆田市|
松潘县|
芜湖县|
偃师市|
红河县|
莱西市|
石阡县|
山阳县|
香港
|
饶平县|
宁远县|
称多县|
河北省|
靖安县|
莒南县|
三门峡市|
东海县|
锦屏县|
淮安市|
孝昌县|