![]() |
|
|
Регистрация | << Правила форума >> | 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, которое почему то закомментарено
|