Я пытаюсь создать TCP "Proxy" или "PortForwarder", используя TcpClient и TcpListener в C #.Из примеров MSDN и примера «Простой TCP Forwarder в C #» (хотя я хочу использовать вместо него TcpClient / Listener!) Я смог получить базовый Listener + Client + Forwarder.Я планирую сделать это асинхронным в будущем.Проблема, с которой я сталкиваюсь, заключается в том, что любое новое соединение через прослушиватель не «подключается» или получает отказ.
Я уже пытался сделать его асинхронным, чтобы избежать «блокировки» сокета.Кажется, это не имеет никакого значения.Я убедился, что порт открыт, и есть приемный сокет, к которому я звоню «Подключиться».
public void StartProxy()
{
TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 1709);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
TcpClient forwarder = new TcpClient();
client.NoDelay = true;
forwarder.NoDelay = true;
forwarder.Connect(IPAddress.Parse("*Server IP*"), 1992);
while (true)
{
DataExchange(client, forwarder);
DataExchange(forwarder, client);
}
}
public void DataExchange(TcpClient client, TcpClient forwarder)
{
int bytesRead = 0;
byte[] buffer = new byte[8192];
bytesRead = client.GetStream().Read(buffer, 0, buffer.Length);
if (bytesRead > 0)
{
forwarder.GetStream().Write(buffer, 0, bytesRead);
}
}
Первым тестом, который я использовал, было использование PSTools и ping "127.0.0.1:1709".Он пингует и получает результат штраф за первые 32 пинга - затем он закрывается / отказывается больше.РЕДАКТИРОВАТЬ: Когда он закрывает / прекращает принимать больше пингов, загрузка ЦП приложения резко возрастает с 0% до 12% и остается там.
Второй тест на самом деле был направить мой трафик World of Warcraft через него,Когда открывается первый сокет / соединение, оно пересылается и получает результат в порядке.Как только открывается второе соединение, оно никогда не достигает своего места назначения.Например, первое соединение - это вход в игру, а второе - выбор сервера.Я получу «Успех» при входе в игру, но это не пойдет дальше.
Я новичок в этом, и я ценю любую помощь, которая поможет мне преодолеть это препятствие!