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();

ИИ поможет Вам:


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

Оцени полезность:

14   голосов , оценка 4.071 из 5