|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
|||||||||||||||||||||
.NET 3.x Чат TCP Консоль сервер + WinForm клиент30.06.2016, 18:21. Показов 19710. Ответов 33
Метки нет (Все метки)
Чат TCP сервер консоль + WinForm клиент
Есть код где Консоль сервер+ Консоль клиент создает Чат но когда это я перевел на Консоль сервер+ WinForm клиент возникает проблема , при отправки через клиент сообщения цикл стает бесконечен к зависанию , как и в WinForm клиент что не хватает в коде этом ? Консоль сервер Winform_Winform_Chat файл Program.cs
WinForm клиент Winform_Winform_Chat файл Form1.cs
Суть такая что на консоли клиента и сервера этот пример работает как только код перегнать на сервер, и Winform клиент то пример не работает, циклиться к зависанию явно что то не хватает , я пробывал решить, но не получилось ходил по кругу , как не крути не получаеться Надеюсь кто то знает , то его не хватает в этом коде товарищи?
1
|
|||||||||||||||||||||
| 30.06.2016, 18:21 | |
|
Ответы с готовыми решениями:
33
Клиент-сервер. Чат на виртуальном сервере Как пишется Клиент-Сервер (чат)? Книги о программировании TCP/IP (Клиент-сервер) |
|
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
||||||
| 30.06.2016, 19:05 | ||||||
|
Почему бы ему не циклить?
1
|
||||||
|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
||||||
| 30.06.2016, 22:12 [ТС] | ||||||
|
я проверял уберал вот так
зависает тут что то глубже
0
|
||||||
|
132 / 82 / 29
Регистрация: 01.10.2014
Сообщений: 263
|
|
| 30.06.2016, 23:47 | |
|
GENDALF_ISTARI Бесконечные циклы при получении и отправке грузят как минимум одно ядро вашего процессора на 100%.
Используйте асинхронные методы. writeasync и readasync. Здесь можно посмотреть простенький пример.
1
|
|
|
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|||||||
| 01.07.2016, 07:14 | |||||||
|
Но глючит:
while (Stream.DataAvailable), а как-то понадёжнее.К примеру, читать посимвольно и ждать символа разделителя (ну и отправлять его, соответственно). Иначе выходит, что имя и сообщение склеивается в один пакет.
1
|
|||||||
|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
||||||
| 01.07.2016, 07:35 [ТС] | ||||||
|
Нужно тогда так пример , но я пока не проверял)))
0
|
||||||
|
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|||||||||||
| 01.07.2016, 08:19 | |||||||||||
|
Вот мой вариант отправки и чтения:
Немного кривовато (лучше было бы использовать BinaryReader), но всю программу я переписывать не хочу ![]()
ReceiveMessage() после Disconnect(); добавить return;.Я ещё некоторые мелочи менял, поэтому вот архив:
1
|
|||||||||||
|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
|||||||||||||||||||||
| 01.07.2016, 11:35 [ТС] | |||||||||||||||||||||
|
К стати Vort_
если ты заметил есть там функция в объекте ServerObject.cs
получается индивидуальная обработка Мало того если клиент будет слать сообщения сложного характера )) например autorize|Колян|1234 а точней код такой у клиента "autorize|"+text1.Text+"|"+text2.Tex t и написать так в серверу что приймет это сообщение
дает ответ серверу , либо клиент в чате пишется либо авторизируеться , либо какие то личные данные он взаемодействует Еще применить и шифровку сообщений например RSA то вообще замечательно , короче клевая штука ))) Добавлено через 4 минуты Моя задача чтоб код был универсальный чтоб Консоль сервер + Winform клиент и можно было как в чате писать , так и переключиться на другое делать ну этот вопрос понятен , главное код сделать так чтоб был лояльный к таким делам)))) потому что примеры какие я нашел либо чат , либо индивидуальная обработка и в цикле они как то не совместимы Добавлено через 8 минут Вообще наверное я с нуля код напишу похожий на этот но другой, без protected internal , аналогия как ASP на объектах, что такое попробую )) ну пока этот надо решить код
0
|
|||||||||||||||||||||
|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
||||||
| 01.07.2016, 23:56 [ТС] | ||||||
|
А то есть по индитификатору определять что за данные)
Добавлено через 7 часов 45 минут Смотрел я гуглил BinaryReader не пойму а как это теги индитификатора там не за что заципиться ?
0
|
||||||
|
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|||||||||||
| 02.07.2016, 09:05 | |||||||||||
|
Протокол нужно разрабатывать самостоятельно.
BinaryReader лишь позволяет упростить чтение наиболее часто используемых типов данных. К примеру, можно выделить 1 байт на тип, 2 байта на размер и {размер} байтов на данные. Тогда, для чтения надо сделать вот так:
if/switch по типу и завернуть это в цикл.Затем data можно также читать через BinaryReader:
1
|
|||||||||||
|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
|
| 02.07.2016, 11:59 [ТС] | |
|
Привет переделал
но пишет что поток не доступен для чтения когда сообщение отправляет клиент все нормально но как сервер шлет ответ клиенту то выводит поток не доступен для чтения так и не нашел что это Я это клепал на Visual Studio 2010 Вот посмотри В классе Server_Connect.cs отправка сервера в этом проекте что прикрепил
0
|
|
|
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|||||||||||||||||||||
| 02.07.2016, 15:28 | |||||||||||||||||||||
BinaryWriter после своего уничтожения уносит за собой и поток.Поэтому его лучше создавать в самом начале и затем всё время использовать:
Добавлено через 25 минут Кстати, с BinaryReader/BinaryWriter строку можно отправить и принять даже проще:
1
|
|||||||||||||||||||||
|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
||||||
| 02.07.2016, 21:08 [ТС] | ||||||
|
Сделал так как ты говоришь
Чтения посл конца потока не возможно
0
|
||||||
|
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|||||||
| 03.07.2016, 09:32 | |||||||
Но сервер вместо отправки данных просто закрывает соединение.
1
|
|||||||
|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
|
| 03.07.2016, 10:25 [ТС] | |
|
Я та понял что закраивает только не пойму почему и где ?
в роди нету кода закрытия странно , по ковыряю может где то собака зарыта
0
|
|
|
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
||||||||||||
| 03.07.2016, 10:51 | ||||||||||||
1
|
||||||||||||
|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
||||||
| 03.07.2016, 12:38 [ТС] | ||||||
|
А то есть он должен быть
а то он штампует прием постоянно , не думал что это повлияет
0
|
||||||
|
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
| 03.07.2016, 12:49 | |
|
Тут два вопроса.
Во-первых: когда разрывать соединение. Можно сделать у клиента команду "exit" и разрывать соединение по её приёму. Во-вторых: в каком порядке сервер и клиент должны обмениваться сообщениями. Я вижу два варианта: 1. Сервер всегда слушает на приём. Приходит команда, он её обрабатывает и шлёт ответ, но по своей инициативе никаких данных не отправляет. 2. И сервер и клиент могут в любой момент как отправить сообщение, так и принять. Такой вариант сложнее, для него, скорее всего, нужно делать два треда (на приём и на отправку). Плюс надо как-то помечать пары запросов-ответов, чтобы знать на какой запрос был прислан какой ответ.
1
|
|
|
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
|
||||||||||||||||
| 04.07.2016, 04:41 [ТС] | ||||||||||||||||
|
Тогда нужно
сразу и отправка и прием от сервера
А у сервере
Добавлено через 5 минут Вообще вот этот код что ты посоветовал
его нужно изменить , или дописать что то ?
0
|
||||||||||||||||
| 04.07.2016, 04:41 | |
|
Помогаю со студенческими работами здесь
20
Tcp Сервер - Клиент обмен данными TCP/IP клиент-сервер не могу подключиться Поиск по маске на клиент сервер tcp Как создать многопользовательский чат (Сервер-клиент) Довести до ума чат клиент/сервер, написанный по видеоинструкции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|