27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1

Зависает клиент при приёме от сервера

31.03.2013, 14:42. Показов 1620. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С начало сделал посыл данных только от клиента серверу..там всё хорошо
далее начал делать обратный, от сервера вроде как всё хорошо уходит
но клиент зависает..вроде вывел в отдельные потоки,но всё равно что то не так, помогите разобраться
клиент:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Imaging;
using System.Reflection;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
 
namespace Helper
{
    public partial class mainform : Form
    {
        TcpClient tcpClient;
 
        public mainform()
        {
            InitializeComponent();
        }
 
        static NetworkStream Stream;
        static IPAddress IP = IPAddress.Parse("127.0.0.1");
        const int port = 10203;
 
        void Write(object cl)
        {
            while (true)
            {
                try
                {
                    byte[] numt = new byte[4];
                    Stream.Read(numt, 0, 4);
                    int len = BitConverter.ToInt32(numt, 0);
                    byte[] textData = new byte[len];
                    int cnt = 0;
                    while (cnt != len)
                        cnt += Stream.Read(textData, 0, textData.Length - cnt);
                    string InputData = Encoding.Unicode.GetString(textData);
                    richTextBox1.Invoke(new Action<String>(SetStr), InputData);
 
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;
                }
            }
            Stream.Close();
            tcpClient.Close();
        }
 
        bool flag;
        string rtf = "";
        private void SetStr(string s)
        {
            if (s != "")
            {
                string date = DateTime.Now.ToString();
                if (!flag)
                {
                    richTextBox1.Text += date + Environment.NewLine;
                    int my1stPosition = richTextBox1.Find(date);
                    richTextBox1.SelectionStart = my1stPosition;
                    richTextBox1.SelectionLength = date.Length;
                    richTextBox1.SelectionColor = Color.FromArgb(255, 15, 63);
                    richTextBox1.SelectionFont = new Font("Arial", 10, FontStyle.Bold);
 
                    richTextBox1.Text += s + Environment.NewLine;
                    int my2stPosition = richTextBox1.Find(s);
                    richTextBox1.SelectionStart = my2stPosition;
                    richTextBox1.SelectionLength = s.Length;
                    richTextBox1.SelectionColor = Color.DarkSlateGray;
                    richTextBox1.SelectionFont = new Font("Arial", 10, FontStyle.Regular);
                    flag = true;
                }
                else
                {
                    rtf = richTextBox1.Rtf;
                    rtf = rtf.Insert(rtf.Length - 3, "\\cf1\\b " + date + "\\par" + "\\cf2\\b0 " + s + "\\par\\par");
                    richTextBox1.Rtf = rtf;
                    richTextBox1.Select(richTextBox1.TextLength - 1, 0);
                    richTextBox1.ScrollToCaret();
                }
 
            }
        }
 
        Thread listenThread;
        private void button2_Click(object sender, EventArgs e)
        {
            tcpClient = new TcpClient();
            try
            {
                listenThread = new Thread(new ThreadStart(ListenForClients));
                listenThread.Start();
                listenThread.IsBackground = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Сервер не доступен! Повторите попытку.",  MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
 
        private void ListenForClients()
        {
            tcpClient.Connect(IP, port);
            Stream = tcpClient.GetStream();
            while (true)
            {
                Thread clientThread = new Thread(new ParameterizedThreadStart(Write));
                clientThread.Start();
            }
        }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2013, 14:42
Ответы с готовыми решениями:

Зависает при приёме больших данных
не могу разобраться что я делаю с потоком входящих данных не так, при входе большого колличества данных цикл уходит на второй круг и...

Программа зависает при приеме файла через NetworkStream
Передаю файл с сервера клиенту. Код клиентской части: FileStream fs = new FileStream(filename, FileMode.Create,...

Клиент-серверное приложение перстает работать при отправке/приеме 3-4 сообщений
Здравствуйте! При создании сервера (пока он ещё на начальном этапе и я сделал только самое простое) у меня возникла проблема: сначала...

4
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
31.03.2013, 14:47
может вместо Invoke использовать BeginInvoke?
0
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
31.03.2013, 14:52  [ТС]
нет..проблема точно не в этом...он туда даже не доходит..

Добавлено через 43 секунды
он настолько сильно вешается, что даже VS вешается...

Добавлено через 1 минуту
а через некоторое время выдаёт исключение типа "System.OutOfMemoryException".
на строчку
C#
1
clientThread.Start();
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
31.03.2013, 15:49
у вас там везде while(true), и при записи тоже, не оч хорошо такие штуки делать ведь
0
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
31.03.2013, 16:57  [ТС]
это всё не является решением проблемы..
хотя бы потому что на сервере это работает..с этими самыми while(true)
при этом если сообщение было послано, а потом перезапустить клиент, то он его принимает..и зависает..

Добавлено через 54 минуты
в общем вопрос в следующем:
Как правильно принимать сообщения от сервера?
м.б. создавать нечто вроде сервера внутри клиента, или есть более адекватный способ?..связанный лишь с добавлением некоторого функционала в клиент..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2013, 16:57
Помогаю со студенческими работами здесь

Программа зависает при приеме сообщения через com порт
создал один виртуальный порт.Написал программу для чтения и записи по этому порту, но при приёме текста, всё зависает. думаю ошибка...

При запуске зависает удаленный клиент
Добрый вечер, программистам и администраторам! Ребята, перенес базу &quot;ЗиК&quot; с обновлением платформы на новый сервер под управлением...

Клиент-сервер зависает при старте
Написал клиент-серверное приложение, помогите найти проблему. После старта сервера программа зависает, кто-нибудь сталкивался? исходник...

Зависает клиент при получении файла
часть сервера public void getFile(string name) { FileStream fstFile = new FileStream(name,...

зависает клиент при работе с Odbcconnection.
Добрый день всем.! Возникла следующая проблема: На кнопку повесил код, который запускает RunOnserver агента, который должен...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru