|
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 31
|
|
TCP чат: обрезаются слова, напечатанные кириллицей05.06.2012, 23:09. Показов 3263. Ответов 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 и более пользователей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|