Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/33: Рейтинг темы: голосов - 33, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 14.02.2009
Сообщений: 7

Чат в Билдере 2009

01.04.2009, 20:24. Показов 7094. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю чат в C++ Builder 2009 через TClientSocket и TServerSocket.
Но вместо нормальных сообщений приходит какая-то фигня. Че-то там куда-то и как-то надо перевести...только вот че и куда...
И кстати как можно сделать, чтобы чат работал по интернету, ато там динамические IP ведь практически у всех, не все же мне с самим собой переписываться
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.04.2009, 20:24
Ответы с готовыми решениями:

Чат на билдере
хочу написать подобие чата на билдере все, что нашел в гугле...

Как установить компонент рабодающий на Билдере 5 в Билдер 2009?
Добрый день, возникла такая проблемка, есть проект написанный на Билдере 5, в проекте используются компоненты - EMailLabel,...

ClientSocket и ServerSocket Builder 2009 кодировка ASCII и UNICODE в Builder 2009
Добрый день. Столкнулся с проблемой, ServerSocket (сереверное приложение ) было написано на Builder 2006 ,ClientSocket написан на Builder...

21
 Аватар для QenT
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
01.04.2009, 23:39

ты хотя бы исходник кинул
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
02.04.2009, 10:44
Цитата Сообщение от Argon-1 Посмотреть сообщение
кстати как можно сделать, чтобы чат работал по интернету, ато там динамические IP
Ну так чаты обычно работают не напрямую, а через сервер.
0
0 / 0 / 0
Регистрация: 14.02.2009
Сообщений: 7
02.04.2009, 14:55  [ТС]
Исходник:
Вложения
Тип файла: rar 123.rar (6.5 Кб, 128 просмотров)
0
0 / 0 / 0
Регистрация: 14.02.2009
Сообщений: 7
02.04.2009, 18:34  [ТС]
Ток не правильный я исходник кинул...=)
Вот еще.
Да в принципе и без исходника понятно:
Клиент отправляет сообщение: clientsocket1->Socket->SendText(Edit1->Text);
Сервер принимает и выводит:
Memo1->Lines->Add(Socket->ReceiveText());
Собственно выводит он белиберду... квадратики какие-то...=)
Вложения
Тип файла: rar 1234.rar (6.4 Кб, 138 просмотров)
0
0 / 0 / 0
Регистрация: 14.02.2009
Сообщений: 7
05.04.2009, 15:26  [ТС]
Блин, капец никто чат чтоль не делал?
0
 Аватар для QenT
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
11.04.2009, 23:14
в 2009 builder'e нету компонентов clientsocket,serversocket, а я бы поэксперементировал бы(
0
2 / 2 / 0
Регистрация: 10.04.2009
Сообщений: 11
15.04.2009, 17:23
Цитата Сообщение от QenT Посмотреть сообщение
в 2009 builder'e нету компонентов clientsocket,serversocket, а я бы поэксперементировал бы(
В 2009 тоже есть. Просто они по-умолчанию отключены. Компоненты находятся в папке ...\bin\dclsockets120.bpl.
После установки появятся на вкладке internet.

Добавлено через 17 минут 2 секунды
Цитата Сообщение от Argon-1 Посмотреть сообщение
Но вместо нормальных сообщений приходит какая-то фигня. Че-то там куда-то и как-то надо перевести...только вот че и куда...
У меня подобная проблема.
Как ты ее решил? Если решил конечно. На форуме Embarcadero говорили, что это ошибка девелоперов. С тотальным переходом на Unicode разработчики не все компоненты переделали. Метод SendText отправляет строку AnsiString, а метод ReceiveText принимает строку UnicodeString. И поэтому приходят левые символы. Можешь использовать методы SendBuf и ReceiveBuf. Но если найдешь другое решение, то напиши здесь.
0
 Аватар для RazorQ
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
15.04.2009, 17:27
Может в кодировке проблема?
0
0 / 0 / 0
Регистрация: 14.02.2009
Сообщений: 7
16.04.2009, 19:09  [ТС]
Cl3r1k
Тема ожила...
Буфер никогда не юзал, немного погуглил, но так и не понял, времени нет искать дальше, не мог бы ты на примере объяснить как делать ? Ну например надо отослать текст который написан в Edit1.
Кстати, а обновление ничем не поможет ?

RazorQ
Я так понял, что в путанице между юникодам и анси стрингами. Кста как перевести из анси в юникод и обратно ?
0
 Аватар для RazorQ
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
17.04.2009, 09:18
Цитата Сообщение от Argon-1 Посмотреть сообщение
Кста как перевести из анси в юникод и обратно ?
Юзай CharToOen. Нужен заголовок <windows.h>
0
2 / 2 / 0
Регистрация: 10.04.2009
Сообщений: 11
17.04.2009, 13:31
Цитата Сообщение от Argon-1 Посмотреть сообщение
Cl3r1k
Тема ожила...
Буфер никогда не юзал, немного погуглил, но так и не понял, времени нет искать дальше, не мог бы ты на примере объяснить как делать ? Ну например надо отослать текст который написан в Edit1.
Кстати, а обновление ничем не поможет ?
1. Обновление ни первое ни тем более второе ни чем не поможет.

2. Используя пару SendBuf и ReceiveBuf у меня возникли некоторые проблемы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Посылаем сообщение с помощъю SendBuf
void __fastcall TFormMain::btnSendBufClick(TObject *Sender)
{
    ClientSocket1->Socket->SendBuf(edtMessage->Text.c_str(), edtMessage->Text.Length());
}
 
// Принимаем сообщение
void __fastcall TFormMain::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket)
{
    // Переменная для длины принятых данных
    int iBufSize = Socket->ReceiveLength();
    // Переменная для приема буфера
    char *Buf = new char [iBufSize + 1];
 
    Socket->ReceiveBuf(Buf, iBufSize);
    edtReceivedMsg->Text = AnsiString(Buf);
    delete []Buf;
}
Например пересылая текст "Hello coder" из edtMessage (TEdit) в edtReceivedMsg получаем только символ "H".

Может я что-то не так сделал? Буду премного благодарен если кто-то укажет на мою ошибку.

3. Я же решил эту проблему используя методы SendText и ReceiveBuf

C++
1
2
3
4
5
6
7
// Посылаем сообщение с помощъю SendText
void __fastcall TFormMain::btnSendTextClick(TObject *Sender)
{
    ClientSocket1->Socket->SendText(edtMessage->Text);
}
 
// Прием сообщения как в пункте 2
Так же отсылая строку "Hello coder", получаем "Hello coder".

Хочу заметить, что в прикрепленном проекте это работает вполне стабильно. Но в моем предыдущем случае при отправке того же сообщения получал "Hello codert" или какие-нибудь другие левые символы в конце. Частично решил проблему увеличением размера Buf
(char *Buf = new char [iBufSize + 5]), но при отправке большого текста возникает подобная проблема. Приходится опять увеличивать размер буфера. Опять же буду благодарен если кто-нибудь укажет на мои ошибки.

RazorQ
Я так понял, что в путанице между юникодам и анси стрингами. Кста как перевести из анси в юникод и обратно ?[/QUOTE]

4. Вроде так
C++
1
2
3
4
    AnsiString aStr = "This example string;";
    UnicodeString uStr;
 
    uStr = UnicodeString(aStr);
RazorQ
Юзай CharToOen. Нужен заголовок <windows.h>
Может CharToOem?
Вложения
Тип файла: rar Client_Server2.rar (8.9 Кб, 75 просмотров)
0
1 / 1 / 1
Регистрация: 28.02.2007
Сообщений: 9
17.04.2009, 13:39
Натраиваешь свойства Port и Address у ClientSocket.

Отсылаешь при помощи какогонибудь контола сообщение
C++
1
ClientSocket1->Socket->SendText(Edit1->Text);
Сервер слушает и когда приходит сообщение от клиента срабатывает событие ClientRead, в котором нужно принять сообщение
C++
1
AnsiString str = Socket->ReceiveText();
А дальше со строкой делать что нужно!!! Удачи!
0
 Аватар для RazorQ
591 / 357 / 16
Регистрация: 06.02.2009
Сообщений: 1,386
17.04.2009, 19:15
Цитата Сообщение от Cl3r1k Посмотреть сообщение
CharToOem
Да, это я ошибся.
Ну например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <windows.h>
using namespace std;
 
char buf[256];
char *Rus(const char *txt){
       CharToOem(txt, buf);
       return buf;
}
void main(){
cout << Rus("Привет");
return;
}
0
2 / 2 / 0
Регистрация: 10.04.2009
Сообщений: 11
18.04.2009, 10:25
Цитата Сообщение от RazorQ Посмотреть сообщение
Да, это я ошибся.
Ну например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <windows.h>
using namespace std;
 
char buf[256];
char *Rus(const char *txt){
       CharToOem(txt, buf);
       return buf;
}
void main(){
cout << Rus("Привет");
return;
}
Если мне память не отказывает, то CharToOem используется для отображения кирилицы в консольных приложениях, но никак не для перевода из Ansi в Unicode.

Добавлено через 1 час 9 минут 1 секунду
Цитата Сообщение от AndrewT Посмотреть сообщение
Натраиваешь свойства Port и Address у ClientSocket.

Отсылаешь при помощи какогонибудь контола сообщение
C++
1
ClientSocket1->Socket->SendText(Edit1->Text);
Сервер слушает и когда приходит сообщение от клиента срабатывает событие ClientRead, в котором нужно принять сообщение
C++
1
AnsiString str = Socket->ReceiveText();
А дальше со строкой делать что нужно!!! Удачи!
Ты сам хоть пробовал то что написал?
В 6 builder'е это работает. Но здесь речь идет о 2009'ом. И как уже было написано ранее приходит хрень вместо сообщения.
Убедительная просьба: внимательно читайте посты, чтоб не появлялось подобных сообщений, соответственн подобного флуда.
0
 Аватар для QenT
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
18.04.2009, 17:35
у кого получилось, что нибудь работающее на 2009
выложите пожалуйста исходник
0
2 / 2 / 0
Регистрация: 10.04.2009
Сообщений: 11
19.04.2009, 10:04
Цитата Сообщение от QenT Посмотреть сообщение
у кого получилось, что нибудь работающее на 2009
выложите пожалуйста исходник
Вот, набросал по-быстрому.
Оптимизацию и отлов ошибок оставляю на ваше усмотрение.
Вложения
Тип файла: rar CS.rar (7.9 Кб, 138 просмотров)
0
2 / 2 / 0
Регистрация: 10.04.2009
Сообщений: 11
19.04.2009, 20:02
Кто посмотрел вложение. Как считаете? Нормально ли организована пересылка и прием сообщения? Чет меня напрягает такая реализация. И если у кого-то вдруг возникнут проблемы при пересылке сообщений, ну там не то будет приходить. Прошу описать проблемку и действия для ее возникновения.
1
0 / 0 / 0
Регистрация: 14.02.2009
Сообщений: 7
21.04.2009, 16:39  [ТС]
Всем сенкс биг, а особенно Cl3r1k. Прям не знаю чтоб без тя делал, насчет твоей реализации, то у мя слишком маленький стаж чтобы увидеть здесь что-то неладное=) Пока так буду юзать.

Добавлено через 22 часа 34 минуты 37 секунд
А можно как-нибудь передать числовой массив ? о_0
0
2 / 2 / 0
Регистрация: 10.04.2009
Сообщений: 11
22.04.2009, 12:51
Цитата Сообщение от Argon-1 Посмотреть сообщение
А можно как-нибудь передать числовой массив ? о_0
Да в принципе почти так же как со строкой.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 // Массив для отправки
 int array[15] = {4, 2, 1, 645, 789, 6546,666, 444, 333 , 0001, 789, 951, 30, 78, 87};
 
 // Посылаем массив с помощью метода SendBuf
 ClientSocket1->Socket->SendBuf(array, sizeof(array));
 
 
// В onClientRead
 // Массив для приема
 int Inp_array[15];
 
 Socket->ReceiveBuf(Inp_array, sizeof(Inp_array));
 for (int i = 0; i < 15; i++)
 {
  ShowMessage(IntToStr(Inp_array[i]));
 }
если же тебе надо переслать структуру или большой объем данных то тебе сюда http://forum.ixbt.com/topic.cgi?id=26:37646
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2009, 12:51
Помогаю со студенческими работами здесь

Чат или видео чат
Создал тему здесь, т.к. ближайшего раздела не вижу. Хотелось бы понять как установить видеочат, типа бонгакамс, если есть бесплатная...

Length() в билдере
Всем привет! Есть задание: Дан текст, содержащий от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними...

Иконка в билдере
Вот пишу билдер. Все норм. В параметрах задал имя создающегося приложения Params.OutputAssembly = &quot;asff.exe&quot;; А собственно...

Калькулятор в билдере
Помогите пожайлуйста с объяснением 4. Организовать в программе калькулятор. В калькуляторе предусмотреть только «кнопочный» набор...

графики в билдере
Други форумчане, что посоветуете использовать для построения графиков в билдере?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru