C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Простой чат на FireMonkey в XE8  (Прочитано 3432 раз)
AngelDance
новенький
*

Сказали спасибо: +1/-0
Offline Offline

Сообщений: 2


« : 01 июня 2015, 13:48:57 »

Добрый день!

Решил попробовать свои силы и написать простой чат для общения. Ничего особого, просто для общения двух людей на разных ПК.

Создал простую форму, добавил на нее:
1. idTcpClient переименовал -> ChatClient
2. idTcpServer -> ChatServer
3. TEdit -> EHost (тут IP адрес ПК для соединения, пока поставил 127.0.0.1)
4. TEdit -> EMessage (тут ввожу сообщение для отправки)
5. TListBox -> LMessage (тут показываю присланное сообщение)
6. Button -> просто назвал Send (при нажатии сообщение отправляется)

Установил ChatServer->Active=true;

Вот код кнопки отправки сообщения:
Код C++
Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ChatClient->Host = EHost->Text;
ChatClient->Connect();
// if(ChatClient->Connected()==true) ChatClient->Socket->Write("Client is connected");
ChatClient->Socket->Write(EMessage->Text.Length());
ChatClient->Socket->Write(EMessage->Text,enUTF8);
ChatClient->Disconnect();
 
EMessage->Text="";
}


вот код метода Execute -> idTcpServer

Код C++
Код
void __fastcall TForm1::ChatServerExecute(TIdContext *AContext)
{
int length = AContext->Connection->Socket->ReadLongInt();
UnicodeString Message = AContext->Connection->Socket->ReadString(length,enUTF8);
AContext->Connection->Disconnect();
LMessage->Items->Add(Message);
}


Сообщение набранное латиницей вроде отправляется и принимается.
Сообщение же набранные кириллицей не отправляются, или отправляются но доходят не полностью, например отправляем "Привет", а приходит "При" или вообще вопросы.
Я понимаю, что скорее всего проблема в кодировке, но вот как поправить все...не могу сообразить.
Кто знает в чем может быть дело? Буду благодарен за любую помощь!
Записан
AngelDance
новенький
*

Сказали спасибо: +1/-0
Offline Offline

Сообщений: 2


« Ответ #1 : 02 июня 2015, 09:34:42 »

Все, разобрался. Выкладываю, может кому пригодиться.

Вот код кнопки отправки сообщения:

Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ChatClient->Host = EHost->Text;
IdIOHandlerStack1->Host = EMessage->Text;
UnicodeString Message;
try
{
 
try
  {
 
       ChatClient->Connect();
       UnicodeString Message = EMessage->Text;
       ChatClient->IOHandler->WriteLn(Message, enUTF8);
 
  }
 
  catch (...)
     {
      //сообщение об ошибке
     }
}
 __finally
   {
       ChatClient->Disconnect();
   }
 
EMessage->Text="";
}

вот код метода Execute -> idTcpServer:

Код
void __fastcall TForm1::ChatServerExecute(TIdContext *AContext)
{
UnicodeString st;
 
try
{
   try
    {
     st = AContext->Connection->IOHandler->ReadLn(enUTF8);
    }
   catch (...)
         {
           //ошибка ввода
         }
}
__finally
       {
        AContext->Connection->Disconnect();
       }
 
 
   LMessage->Items->Add(st);
 
}

Все прекрасно работает и передает в том числе и русский текст!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в: