Сетевое взамодействие

Вечера. Передо мной стоит задача разместить сервер на виртуальной машине, а клиент на хосте. Взаимодействие реализуется через TCPClient&TCPListener. На сервере при выборе порта 3389, на котором стоит удаленный сервер ВМ появляется ошибка о том, что разрешается использование одного адреса порта. Если взять другой порт, то все будет работать. На клиенте же я выбираю порт 3389 и клиент соединяется с сервером, но при выполнении кода появляется ошибка:введите сюда описание изображения

Я предпринимал и менять порты и ip-адреса, даже зарезервировал часть портов, но всеравно ничего не вышло. Клиент

using TcpClient tcpClient = new TcpClient();
await tcpClient.ConnectAsync("192.168.56.104", 3389);
var stream = tcpClient.GetStream();
int bytesRead = 10;
var response = new List<byte>();
bool flag = true;
List<NoteView> notes = new List<NoteView>();
string json_string = string.Empty;
int code = 0;
while (flag)
{

flag = Menu.MainMenu(out json_string, notes, out code);

if(code != -1)
{
    byte[] data = Encoding.UTF8.GetBytes(json_string + '\n');

    // отправляем данные
    await stream.WriteAsync(data);

    // считываем данные до конечного символа
    while ((bytesRead = stream.ReadByte()) != '\n')
    {
        // добавляем в буфер
        response.Add((byte)bytesRead);
    }
    var translation = Encoding.UTF8.GetString(response.ToArray());

    Menu.OutputMenu(out notes, translation);

    response.Clear();
}
}
// отправляем маркер завершения подключения - END
await stream.WriteAsync(Encoding.UTF8.GetBytes("END\n"));

Сервер

var tcpListener = new TcpListener(IPAddress.Any,3388); 

try 
{ 
 
tcpListener.Start();    // запускаем сервер 
Console.WriteLine("Сервер запущен. Ожидание подключений... "); 

while (true) 
{ 
    // получаем подключение в виде TcpClient 
    var tcpClient = await tcpListener.AcceptTcpClientAsync(); 

    // создаем новую задачу для обслуживания нового клиента 
    _ = Task.Run(async () => await ProcessClientAsync(tcpClient)); 

    // вместо задач можно использовать стандартный Thread 
    // new Thread(async ()=>await ProcessClientAsync(tcpClient)).Start(); 
} 
} 
finally 
{ 
tcpListener.Stop(); 
} 
// обрабатываем клиент 
async Task ProcessClientAsync(TcpClient tcpClient) 
{ 
 
NoteController noteController = new NoteController(); 
var stream = tcpClient.GetStream(); 
// буфер для входящих данных 
var response = new List<byte>(); 
int bytesRead = 0; 
string translate = ""; 
while (true) 
{ 
    // считываем данные до конечного символа 
    while ((bytesRead = stream.ReadByte()) != '\n') 
    { 
        // добавляем в буфер 
        response.Add((byte)bytesRead); 
    } 
    var word = Encoding.UTF8.GetString(response.ToArray()); 
     

    // если прислан маркер окончания взаимодействия, 
    // выходим из цикла и завершаем взаимодействие с клиентом 
    if (word == "END") break; 
    var resp = await noteController.Controller(word, tcpClient); 
  
    translate = JsonSerializer.Serialize(resp); 



    // добавляем символ окончания сообщения  
    translate += '\n'; 
    // отправляем перевод слова из словаря 
    await stream.WriteAsync(Encoding.UTF8.GetBytes(translate)); 
    response.Clear(); 
} 
tcpClient.Close(); 
}

Подскажите решение, так как данная проблема не позволяет решить задачу.


Ответы (0 шт):