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# 프로그램 설계에 도움이 되었으면 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.