Почему не происходит подключение к серверу во второй раз? C#
Делаю лабу, и было сказано допилить к проге сервак.Косо-криво сделал и допилил клиентскую часть Но возникла проблема: у меня на формах кнопки, по нажатию на которые происходит соединение с серваком для обмена данными. При первом нажатии все работает как надо, но если нажимаю второй раз, то прога "встает" и не работает. Как решить это я не знаю, потому, прошу вашей помощи. Сервер:
int port = 8080;
// Создаем TCP-сокет и привязываем его к IP-адресу и порту
TcpListener server = new TcpListener(ip, port);
server.Start();
// Бесконечный цикл ожидания подключений
while (true)
{
Console.WriteLine("Ожидание подключения...");
// Ожидаем подключение клиента и создаем сокет для взаимодействия
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Клиент подключен!");
// Получаем сетевой поток для чтения и записи данных
NetworkStream stream = client.GetStream();
// Цикл взаимодействия с клиентом
while (client.Connected)
{
// Читаем данные из сетевого потока
byte[] data = new byte[256];
int bytes = stream.Read(data, 0, data.Length);
string mesage = Encoding.UTF8.GetString(data, 0, bytes);
Console.WriteLine("Клиент: " + mesage);
string response = " ";
// Отправляем ответ клиенту
if(mesage == "password")
{
response = card.password;
}
else if(mesage == "money")
{
response = Convert.ToString(card.money);
}
else if(mesage == "exit")
{
stream.Close();
client.Close();
}
byte[] responseData = Encoding.UTF8.GetBytes(response);
stream.Write(responseData, 0, responseData.Length);
}
Одна из кнопок в клиентской части:
// Устанавливаем IP-адрес и номер порта для подключения
IPAddress ip = IPAddress.Parse("127.0.0.1");
int port = 8080;
// Создаем TCP-сокет и подключаемся к серверу
TcpClient client = new TcpClient();
;
if (!client.Connected)
{
client.Connect(ip, port);
}
NetworkStream stream = client.GetStream();
string message = "password";
byte[] data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
stream.Flush();
// Читаем ответ сервера из сетевого потока
byte[] data1 = new byte[256];
int bytes = stream.Read(data1, 0, data1.Length);
string message1 = Encoding.UTF8.GetString(data1, 0, bytes);
if (message1 == textBox1.Text)
{
DefaultForm defaultForm = new DefaultForm();
defaultForm.Show();
this.Hide();
}
else
{
attemps++;
if (attemps >= maxAttemps)
{
textBox1.Enabled = false;
MessageBox.Show("Вы исчерпали все попытки!");
stream.Close();
client.Close();
}
else
{
MessageBox.Show($"Пароль неверный. Осталось попыток: {maxAttemps - attemps}");
string mesage = "exit";
byte[] data2 = Encoding.UTF8.GetBytes(mesage);
stream.Write(data2, 0, data2.Length);
}
}