![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
С 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; |
|
#2
|
|||
|
|||
|
Цитата:
Выложи весь код пожалуйста. |
|
#3
|
|||
|
|||
|
на каждом приложении по две формы использую, вот коды где собственно сами сервер и клиент сокет.
клиент: Код:
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
|
||||
|
||||
|
когда на сервере происходит событие ServerSocketClientConnect не факт, что во входном буфере уже есть данные.
|
|
#5
|
|||
|
|||
|
Цитата:
можно как нибудь определить что данные пришли? |
|
#6
|
||||
|
||||
|
событие ServerSocketClientRead, которое почему то закомментарено
|