Top.Mail.Ru
Ответы

Вопрос по сетевому программированию на dotnet Нужно реализовать проброс портов но как дальше сделать не понимаю.

const int Myport = 6996;
const int PortForward=3000;
const string IP = "127.0.0.1";

static void Main(string[] args)
{

#region Socet Server
// получаем адреса для запуска сокета
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(IP), Myport);
// создаем сокет
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
// связываем сокет с локальной точкой, по которой будем принимать данные
listenSocket.Bind(ipPoint);

// начинаем прослушивание
listenSocket.Listen(10);

Console.WriteLine("Сервер запущен. Ожидание подключений...");

while (true)
{
Socket handler = listenSocket.Accept();
// получаем сообщение
int bytes = 0; // количество полученных байтов
byte[] data = new byte[256]; // буфер для получаемых данных

do
{
bytes = handler.Receive(data);
}
while (handler.Available>0);

Console.WriteLine(DateTime.Now.ToShortTimeString() + ": ришло сообщение");

IPEndPoint ipPointforward = new IPEndPoint(IPAddress.Parse(IP), PortForward);

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// подключаемся к удаленному хосту
socket.Connect(ipPointforward);

Дополнен

Первый сервер ловит подключения, принимает запрос. - создает подключение со вторым сервером. и теперь не могу додуматься как пердать массив байтов второму серверу.

По дате
По рейтингу
Аватар пользователя
Новичок
6лет

Если с ТСР работать, надо данные сразу по мере получения переправлять на выход. А если ждать конца входного потока, так можно и весь день с открытым соединением простоять, чего то напринимать, и ничего на выход не отправить.

Аватар пользователя
Гений
6лет

В один поток это не сделать. ИМХО надо всё переделывать. Сами представьте - н-р Вам надо передать данные дальше, а в это время к Вам приходят новые, но однопоточное приложение уже занято тем, что отправляет данные. В кратковременных быстрых передачах Вы может это и не заметите, но в реале можете в лучшем случае получить лаги с дисконнектами по таймауту.

Возможно поможет пример прокси на Task
https://loosexaml.wordpress.com/2011/04/27/tcp-proxy-in-c-using-tasks-parallel-library/

Кст статья на habrе была по MITM
https://habr.com/post/213397/

Можно ещё почитать про ReceiveAsync, SendAsync...