C# 포트 전달 상세 정보

2442 단어
이 문서의 인스턴스는 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,              
//               � �
          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;
        }
      }
    }
  }
}

이 문서가 C# 프로그램 설계에 도움이 되었으면 합니다.

좋은 웹페이지 즐겨찾기