|
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 31
|
|
TCP чат: обрезаются слова, напечатанные кириллицей05.06.2012, 23:09. Показов 3273. Ответов 8
Метки нет (Все метки)
Здраствуйте. У меня есть соурс tcp чата, он написан не мной, но работает так как мне нужно. Но есть небольшая проблема - при написании русских символов в чат, он их обрабатывает так:
"абв" - выведет "а". "йцукенгшщзхъ" - выведет "йцукен". Даже не знаю куда рыть, ведь он "половину" символов распознает, а вторую съедает ![]() Соурс в приложении
0
|
|
| 05.06.2012, 23:09 | |
|
Ответы с готовыми решениями:
8
Чат на tcp/ip TCP чат
|
|
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
|
|
| 05.06.2012, 23:17 | |
|
Хм, кодировка UTF8. Вероятнее всего в местах, где создается буфер, он создается вдвое меньшей длины, чем нужно. Скорее всего это из-за того, что исходный код был написан для кодировки ASCII, где один символ представляется в виде одного байта, а кто-то сел и заменил кодировку с ASCII на UTF8 (один символ - два байта), но размер выделяемого буфера не исправил.
1
|
|
|
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 31
|
|
| 05.06.2012, 23:55 [ТС] | |
|
Мне достаточно изменить
Encoding.UTF8.GetBytes(strMessage) на Encoding.ASCII.GetBytes(strMessage) ? Добавлено через 2 минуты Нет, недостаточно ![]() Появились вопросики, но зато для каждого русского символа, а не один из трех. Можете посоветовать следущий ход?
0
|
|
|
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
|
||
| 06.06.2012, 00:19 | ||
|
В ASCII нет русских символов, там только первые 128 символов: десяток вспомогательных, цифры и английские буквы. Я же говорю: увеличить размер буфера надо, вот только где - тяжело сказать, так как то ли клиент не все отправляет, то ли сервер не все обрабатывает, то ли оба случая сразу. Ход такой: с помощью дебагера измерить размер отправляемого и получаемого сообщения в байтах, чтобы узнать, кто виноват. К примеру, для строки "йцукенгшщзхъ", состоящей из 12 символов, должно получится 24 байта, а не 12.
1
|
||
|
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 31
|
||||||||||||||||||||||||||
| 06.06.2012, 10:23 [ТС] | ||||||||||||||||||||||||||
Ну есть такой код:
Добавлено через 13 минут Ну вот результаты еще, только не sizeof, а
0
|
||||||||||||||||||||||||||
|
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
|
|||||||
| 06.06.2012, 11:33 | |||||||
|
Хм, а вы пробовали на сервер отправлять больше одного слова? К примеру, "Тестовое сообщение"?
На клиенте показало "стТестово", а на сервере "ст?". Или именовать клиента русскими буквами - приходит кривая половина. В общем, на сервере метод Data(byte[] data) и на клиенте метод ToByte() следует полностью переписать! Это же что там за фигня использовалась? BitConverter.GetBytes? Кто вас такому бреду научил? По-поводу того, как я узнал: я же говорил - буфер создается половинного размера!!! Зайдите в метод Data и в местах инициализации переменные nameLen и msgLen удвойте! На сервер придет полное имя и сообщение, только слегка поврежденное из-за ваших непонятных магических чисел 4, 8 и 12. И какого черта приложение висит в диспетчере задач, если оно завершилось? Вот в общем пища для ума:
1
|
|||||||
|
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 31
|
|
| 06.06.2012, 11:47 [ТС] | |
|
Прошу не ругать меня - код не мой, я лишь хотел адаптировать его для своей локали.
Попробую сначала удвоить "эти" числа.
0
|
|
|
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
|
|
| 06.06.2012, 11:53 | |
|
LongMan, удвоение решает проблему лишь частично, так как там строку вырезали по частям с некоторым смещением, из-за чего будут поврежденные данные. Проще было преобразовывать полностью все сообщение туда и обратно и работать уже со строкой. К примеру придумать такой синтаксис:
<команда>-<имя пользователя>:<сообщение> И с помощью Split или регулярного выражения вырезать нужное из строки.
1
|
|
|
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 31
|
|||||||||||
| 06.06.2012, 12:26 [ТС] | |||||||||||
|
Да, вы правы, удовение изменило "начало" считывания байтов.
Попробую изменить способ отправки байтов на свой. О результатах сообщу. Добавлено через 28 минут Решил проблему, спасибо вам большое. Длина сообщения была неверной:
0
|
|||||||||||
| 06.06.2012, 12:26 | |
|
Помогаю со студенческими работами здесь
9
TCP чат-сервер
Чат на сокетах (TCP) Чат на протоколе TCP TCP чат на 2 и более пользователей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Мысли в слух. Про "навсегда".
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
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|