Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.07.2010, 21:59
Dimakrat Dimakrat вне форума
Прохожий
 
Регистрация: 07.07.2010
Сообщения: 8
Репутация: 10
По умолчанию отправка и прием сообщений в TSocket

С Socket знакомлюсь только, судите не строго.

Проблема вот в чем. При подключении клиента, нужно что бы вывелось сообщение вида "Клиент, Ник клиента, подключился!" Делал через Socket.SendText. Получается так, "Клиент, подключился" и на новой строчке Ник клиента. Скрин выложил.
Безымянный1.JPG

Код сервера:
Код:
procedure TForm2.ServerSocketClientConnect(Sender: TObject; Socket:TCustomWinSocket);
var nik:string;
begin
nik:=Socket.ReceiveText;
Memo1.Lines.Add('(['+DateToStr(Now)+']:['+TimeToStr(Now)+']) Клиент,'+nik+'подключился');
end;

код клиента:
Код:
procedure TForm2.ClientSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('[('+DateToStr(Now)+'):('+TimeToStr(Now)+')] Подключились');
Socket.SendText(Form1.NikEdit.Text);
end;
Изображения
Тип файла: jpg Безымянный.JPG (31.4 Кбайт, 12 просмотров)
Ответить с цитированием
  #2  
Старый 08.07.2010, 15:49
Artempokrowski Artempokrowski вне форума
Прохожий
 
Регистрация: 05.07.2010
Сообщения: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от Dimakrat
С Socket знакомлюсь только, судите не строго.

Проблема вот в чем. При подключении клиента, нужно что бы вывелось сообщение вида "Клиент, Ник клиента, подключился!" Делал через Socket.SendText. Получается так, "Клиент, подключился" и на новой строчке Ник клиента. Скрин выложил.
Вложение 1489

Код сервера:
Код:
procedure TForm2.ServerSocketClientConnect(Sender: TObject; Socket:TCustomWinSocket);
var nik:string;
begin
nik:=Socket.ReceiveText;
Memo1.Lines.Add('(['+DateToStr(Now)+']:['+TimeToStr(Now)+']) Клиент,'+nik+'подключился');
end;

код клиента:
Код:
procedure TForm2.ClientSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('[('+DateToStr(Now)+'):('+TimeToStr(Now)+')] Подключились');
Socket.SendText(Form1.NikEdit.Text);
end;

Выложи весь код пожалуйста.
Ответить с цитированием
  #3  
Старый 08.07.2010, 21:20
Dimakrat Dimakrat вне форума
Прохожий
 
Регистрация: 07.07.2010
Сообщения: 8
Репутация: 10
По умолчанию полный код.

на каждом приложении по две формы использую, вот коды где собственно сами сервер и клиент сокет.
клиент:
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;

type
  TForm2 = class(TForm)
    ClientSocket: TClientSocket;
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ClientSocketConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocketDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.FormActivate(Sender: TObject);
begin
ClientSocket.Port:=159;
ClientSocket.Address:=Form1.AddressEdit.Text;
ClientSocket.Host:=Form1.AddressEdit.Text;
ClientSocket.Active:=True;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ClientSocket.Active:=False;
Form2.Hide;
Form1.Show;
end;

procedure TForm2.ClientSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var nik: string;
begin
Memo1.Lines.Add('[('+DateToStr(Now)+'):('+TimeToStr(Now)+')] Подключились');
Socket.SendText(Form1.NikEdit.Text);
end;

procedure TForm2.ClientSocketDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('[('+DateToStr(Now)+'):('+TimeToStr(Now)+')] Отключились');
Socket.SendText(Form1.NikEdit.Text);
end;

procedure TForm2.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(Edit1.Text);
ClientSocket.Socket.SendText(Edit1.Text);
Edit1.Clear;
end;

end.

сервер:
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;

type
  TForm2 = class(TForm)
    ServerSocket: TServerSocket;
    Memo1: TMemo;
    Label1: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure ServerSocketClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocketClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.FormActivate(Sender: TObject);
begin
Label1.Caption:=Form1.IdIPWatch1.LocalIP;
ServerSocket.Port:=159;
ServerSocket.Active:=True;
Memo1.Lines.Add('Сервер создан...');
end;

procedure TForm2.ServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var nik:string;
begin
nik:=Socket.ReceiveText;
Memo1.Lines.Add('(['+DateToStr(Now)+']:['+TimeToStr(Now)+']) Клиент,'+nik+'подключился');
end;

procedure TForm2.ServerSocketClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var nik:string;
begin
nik:=Socket.ReceiveText;
Memo1.Lines.Add('(['+DateToStr(Now)+']:['+TimeToStr(Now)+']) Клиент, '+nik+' отключился');
end;

procedure TForm2.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
//Memo1.Lines.Add(Socket.ReceiveText);
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket.Active:=False;
Form2.Hide;
Form1.Show;
end;

end.

Выводится теперь так:прога.JPG

Последний раз редактировалось Dimakrat, 08.07.2010 в 21:34. Причина: ошибку в коде нашел
Ответить с цитированием
  #4  
Старый 09.07.2010, 22:34
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

когда на сервере происходит событие ServerSocketClientConnect не факт, что во входном буфере уже есть данные.
Ответить с цитированием
  #5  
Старый 09.07.2010, 22:46
Dimakrat Dimakrat вне форума
Прохожий
 
Регистрация: 07.07.2010
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
когда на сервере происходит событие ServerSocketClientConnect не факт, что во входном буфере уже есть данные.

можно как нибудь определить что данные пришли?
Ответить с цитированием
  #6  
Старый 09.07.2010, 22:48
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

событие ServerSocketClientRead, которое почему то закомментарено
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025