Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2010, 23:04   #1
wowsel
Begin'нер
Пользователь
 
Аватар для wowsel
 
Регистрация: 30.04.2010
Сообщений: 48
Восклицание Определение клиента TServerSocket

Здравствуйте.
Пишу тест на delphi с использованием выше названных компонентов, возник такой вопрос: Клиент соединяется с серверов, отправляет ему нужные данные и должен получить ответ, как серверу отправить ответ именно нужному клиенту а не через перебор всем?
Клиент
Код:
procedure TMainform1.csConnect(Sender: TObject; Socket: TCustomWinSocket);
var
  mydate: Tdatetime;
  formatteddatetime: string;
begin
  mydate := Now;
  // Получаем текущее время

  DateTimeToString(formatteddatetime, 'c', mydate);
  // Переводим в строку
  debug1.log.Lines.Add(formatteddatetime + ': Соединение с сервером - ' +
      Socket.RemoteAddress + '  установлено.');
       cs.Socket.SendText('$N1');

end;
Сервер

Код:
procedure TForm1.sssClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  w,s: string;
  h,i,t,n:integer;
begin
  { сохраняем в s присланную нам строку }
  s := Socket.ReceiveText;
  if Copy(s, 1, 2) = '$N' then
  begin
    Delete(s, 1, 2);
    n:=StrToInt(s);
    case n of
    1: begin ??????
    end;
в 1: begin нам нужно отправить именно тому клиенту кто прислал некоторую строчку, подскажите как. Думаю по поводу sss.Socket.SocketHandle но ничего в голову не приходит.
wowsel вне форума Ответить с цитированием
Старый 21.10.2010, 01:34   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если надо отправить именно обратно, то кто мешает в событии использовать тот самый Socket?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.10.2010, 13:34   #3
wowsel
Begin'нер
Пользователь
 
Аватар для wowsel
 
Регистрация: 30.04.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
если надо отправить именно обратно, то кто мешает в событии использовать тот самый Socket?
Можно поподробней? С сетевыми технологиями знаком не долго, знаю только
Код:
    for k := 0 to sss.Socket.ActiveConnections-1 do
    sss.Socket.Connections[k].SendText('#N');
Это рассылает всем клиентам, а как определить именно того кто прислал и отослать ему?

Последний раз редактировалось wowsel; 21.10.2010 в 13:39.
wowsel вне форума Ответить с цитированием
Старый 21.10.2010, 13:39   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
procedure TForm1.sssClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  w,s: string;
  h,i,t,n:integer;
begin
  { сохраняем в s присланную нам строку }
  s := Socket.ReceiveText;
  if Copy(s, 1, 2) = '$N' then
  begin
    Delete(s, 1, 2);
    n:=StrToInt(s);
    case n of
    1: begin 
         Socket.SendText('Choise 1');
в событии OnClientRead, переменная Socket это клиент которые отправил данные(точнее чьи данные надо получить), используя эту переменную можно тут же отправить данные обратно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.10.2010, 15:47   #5
wowsel
Begin'нер
Пользователь
 
Аватар для wowsel
 
Регистрация: 30.04.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
procedure TForm1.sssClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  w,s: string;
  h,i,t,n:integer;
begin
  { сохраняем в s присланную нам строку }
  s := Socket.ReceiveText;
  if Copy(s, 1, 2) = '$N' then
  begin
    Delete(s, 1, 2);
    n:=StrToInt(s);
    case n of
    1: begin 
         Socket.SendText('Choise 1');
в событии OnClientRead, переменная Socket это клиент которые отправил данные(точнее чьи данные надо получить), используя эту переменную можно тут же отправить данные обратно.
Спасибо огромное, будем пробовать.
wowsel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TServerSocket и TClientSocket grafgrial Общие вопросы Delphi 3 25.08.2010 15:15
TServerSocket, TClientSocket prod87 Работа с сетью в Delphi 7 26.10.2009 22:38
TServerSocket goblinyara Работа с сетью в Delphi 4 24.01.2009 10:10
Определение IP адреса клиента RoamingFire Работа с сетью в Delphi 2 28.02.2008 14:08