LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#端口轉(zhuǎn)發(fā)用法源碼詳解

admin
2024年3月9日 15:38 本文熱度 693

本文實(shí)例講述了C#端口轉(zhuǎn)發(fā)用法。分享給大家供大家參考。具體分析如下:

這里以鏈接3389的時(shí)候?yàn)槔?/p>

例子1:連接a機(jī)器的3389端口連不上,因?yàn)閷?duì)方防火墻或者網(wǎng)關(guān)做了限制,只能訪問a機(jī)器的個(gè)別端口比如80。

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

解決方法:

第一種較簡(jiǎn)單,只需要程序在對(duì)方開80,你連接他80,程序收到數(shù)據(jù)后,發(fā)送到他本機(jī)的3389,同時(shí)從他3389收到數(shù)據(jù)后返回到你。程序就是一個(gè)中轉(zhuǎn)站。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System;
using System.Net.Sockets;
using System.Threading;
namespace PortTransponder
{
  class Program
  {
    static void Main(string[] args)
    {
      TcpListener tl = new TcpListener(80);
//這里開對(duì)方可以被你連接并且未被占用的端口
      tl.Start();
      while (true)
//這里必須用循環(huán),可以接收不止一個(gè)客戶
//因?yàn)槲野l(fā)現(xiàn)終端服務(wù)有時(shí)一個(gè)端口不行就換一個(gè)端口重連
      {
//下面的意思就是一旦程序收到你發(fā)送的數(shù)據(jù)包后立刻開2個(gè)線程做中轉(zhuǎn)
        try
        {
          TcpClient tc1 = tl.AcceptTcpClient();
//這里是等待數(shù)據(jù)再執(zhí)行下邊,不會(huì)100%占用cpu
          TcpClient tc2 = new TcpClient("localhost", 3389);
          tc1.SendTimeout = 300000;
//設(shè)定超時(shí),否則端口將一直被占用,即使失去連接
          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,否則連接一旦中斷程序就崩潰了
//要是彈出錯(cuò)誤提示讓機(jī)主看見那就囧了
          byte[] bt = new byte[10240];
          int count = ns1.Read(bt, 0, bt.Length);
          ns2.Write(bt, 0, count);
        }
        catch
        {
          ns1.Dispose();
          ns2.Dispose();
          tc1.Close();
          tc2.Close();
          break;
        }
      }
    }
  }
}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。


該文章在 2024/3/9 15:38:46 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
综合偷自拍亚洲乱中文字幕 | 亚洲日本337视频大全 | 日韩中文字幕在线综合网 | 亚洲日韩中文在线精品第一 | 日韩在线欧美专区 | 亚洲AV色香蕉一区二区三区夜夜嗨 |