Socket зависает на втором Recieve - C#
Формулировка задачи:
Из-за чего программа (сервер) висит на втором "r_client.Receive(data)" ???
Со стороны клиента второй раз я передаю инфу.
private void MessageReceiver(Socket r_client) { Thread th = new Thread(delegate() { { try { // Сюда будем записывать принятые байты byte[] data = new byte[1024]; r_client.Receive(data); // Принимаем bool step = BitConverter.ToBoolean(data, 0); if (step == false) // ШАГ 1 - Подключение клиента для сверки версий БД { data = new byte[1024]; r_client.Receive(data); // ВОТ ТУТ ...............................
Решение задачи: «Socket зависает на втором Recieve»
textual
Листинг программы
void Connect(String server, Int32 port, String message) { try { // Создаём TCP Client // Note, for this client to work you need to have a TcpServer connected to the same address as specified by the server, port combination TcpClient client = new TcpClient(server, port); // Буффер для хранения ответных данных (bytes) Byte[] data, d=new byte[1]; // Get a client stream for reading and writing // Stream stream = client.GetStream(); NetworkStream stream = client.GetStream(); // ШАГ 1 - Подключение клиента для сверки версий БД data = BitConverter.GetBytes(false); // false - означает, что это Шаг 1 stream.Write(data, 0, data.Length); // отправляет сообщение к подключённому TCP Server stream.Read(d, 0, 1); // ожидаем ответ от сервера $ //Thread.Sleep(1000); timer_connected_Restart(); data = System.Text.Encoding.UTF8.GetBytes(message); // Версия БД stream.Write(data, 0, data.Length); timer_connected_Restart(); //data = new Byte[1024]; // Считываем набор байтов присланных от TCP Server stream.Read(data, 0, data.Length); timer_connected_Restart(); flag = BitConverter.ToBoolean(data, 0); // Закрываем соединение с сервером stream.Close(); client.Close(); if (flag) { timer_connected_Reflesh(); if (MessageBox.Show("Ваше расписание устарело.\nЖелаете скачать новую версию?", "Сообщение от сервера", MessageBoxButtons.YesNo) == DialogResult.Yes) { // ШАГ 2 - Подключение клиента для обновления расписания client = new TcpClient(server, port); stream = client.GetStream(); data = BitConverter.GetBytes(true); // true - означает, что это Шаг 2 stream.Write(data, 0, data.Length); stream.Read(d, 0, 1); // ожидаем ответ от сервера $ //Thread.Sleep(2000); timer_connected_Restart(); data = System.Text.Encoding.UTF8.GetBytes(""); // тут будет инфа о фак-те, группе, подгруппе... stream.Write(data, 0, data.Length); timer_connected_Restart(); data = new Byte[2048]; stream.Read(data, 0, data.Length); timer_connected_Restart(); MemoryStream mSteam = new MemoryStream(data); BinaryFormatter formatter = new BinaryFormatter(); addresses = (DataTable)formatter.Deserialize(mSteam); // Проверка принятых данных test = addresses.Rows[0][0].ToString(); textBox3Text(); // Закрываем соединение с сервером stream.Close(); client.Close();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д