Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TServerSocket and TClientSocket на одной машине 
:(
    Опции темы
rOOxus
Дата 5.5.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



Серверное приложение снабжено компонентом TServerSocket, клиентское TClientSocket, используеться порт 1024.
При подключении клиента к серверу он (клиент) должен передать серверу строку с именем пользователя (значение поля Edit1), а сервер добавить ее в свою табличку (TMemTableEh). Таким образом получаеться
  • сервер хранит список активных клиентов
  • клиет может запросит этот сисок у сервера
Если оба приложения стартуют на одной и той же машине, то первое не работает, а второе работает. Если на разных, то работает все  smile
В чем может быть дело?

Вот код сервера:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "main_unt.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "MemTableDataEh"
#pragma link "MemTableEh"
#pragma link "DBGridEh"
#pragma link "GridsEh"
#pragma link "trayicon"
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ServerSocketClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
   TDateTime DateTime;
   AnsiString clString;

   clString = Socket->ReceiveText();

   ClientsMT->Insert();

   if ( clString.IsEmpty() )
   {
      ClientsMT_User->AsString = "???";
   }
   else
   {
      ClientsMT_User->AsString = clString.UpperCase();
   }
   ClientsMT_Id->AsInteger = Socket->SocketHandle;
   ClientsMT_RemoteHost->AsString = Socket->RemoteHost.UpperCase();
   ClientsMT_ConnectTime->AsDateTime = DateTime.CurrentDateTime();

   ClientsMT->Post();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ServerSocketClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
   ClientsMT->Locate( "id", Socket->SocketHandle, TLocateOptions() << loCaseInsensitive );
   ClientsMT->Delete();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ServerSocketClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
   AnsiString  clComm,
               clMsg,
               srvMsg,
               Buffer;
   int         i,
               clCount = 0;


   clMsg = Socket->ReceiveText();

   clComm = strtok ( clMsg.c_str(), "\t" );

   if ( clComm == "List" )
   {
      ClientsMT->First();

      while ( ! ClientsMT->Eof )
      {
         Buffer = Buffer + ClientsMT_Id->AsString + "\t" +
                           ClientsMT_User->AsString + "\t" +
                           ClientsMT_RemoteHost->AsString + "\t" +
                           ClientsMT_ConnectTime->AsString + "\t";

         ClientsMT->Next();
         clCount ++;
      }

      srvMsg = "List\t" + IntToStr( clCount ) + "\t" + Buffer;
   }

   Memo->Lines->Add( srvMsg );
   Socket->SendText( srvMsg );
}
//---------------------------------------------------------------------------



Вот код клиента
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "main_unt.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "DBGridEh"
#pragma link "GridsEh"
#pragma link "MemTableDataEh"
#pragma link "MemTableEh"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
   Caption = ParamStr(1);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocketError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
   AnsiString Er;

   if ( ErrorEvent == eeConnect )
   {
      Er = "Сервер сообщений на " + ClientSocket->Host.UpperCase() + " не запущен!"
           "\nНекоторые функции будут недоступны.";
      MessageBox(Handle, Er.c_str(), "Ошибка подключения", MB_ICONWARNING );
   }
   else if ( ErrorEvent == eeReceive )
   {
      Er = "Сервер сообщений на " + ClientSocket->Host.UpperCase() + " не запущен!"
           "\nНевозможно выполнить запрос.";
      MessageBox(Handle, Er.c_str(), "Ошибка запроса", MB_ICONERROR );
   }

   ErrorCode = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocketRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
   AnsiString  srvMsg,
               srvComm;
   int i;

   srvMsg = Socket->ReceiveText();
   srvComm = strtok ( srvMsg.c_str(), "\t" );

   if ( srvComm == "List" )
   {
      int clCount = StrToInt ( strtok ( NULL, "\t" ) );

      ClientsMT->DestroyTable();
      ClientsMT->CreateDataSet();

      for ( i = 1; i <= clCount; i ++ )
      {
         ClientsMT->Insert();

         ClientsMT_Id->AsString = strtok ( NULL, "\t" );
         ClientsMT_User->AsString = strtok ( NULL, "\t" );
         ClientsMT_RemoteHost->AsString = strtok ( NULL, "\t" );
         ClientsMT_ConnectTime->AsString = strtok ( NULL, "\t" );

         ClientsMT->Post();
      }
   }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ToolButton1Click(TObject *Sender)
{
   ClientSocket->Host = "ASU201-03-XP";
   ClientSocket->Active = true;   
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ToolButton2Click(TObject *Sender)
{
   ClientSocket->Active = false;   
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ToolButton3Click(TObject *Sender)
{
   ClientSocket->Socket->SendText("List\t");   
}
//---------------------------------------------------------------------------


void __fastcall TForm1::ClientSocketConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
   Socket->SendText( Edit1->Text );
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.