Цитата:
Сообщение от Страдалецъ
Сами спровоцировали человека, ответить в стиле вашего вопроса, а теперь обижаетесь. Меньше воды, больше кода. Телепатов тута нет.
|
Непонимаю чем я его спровоцировал, и причём тут ваще Russian Online (он про него и говорил, типа в ММО нужно идеально знать сокеты, а я не ими в проекте занимаюсь) хотя вопрос данной темы мне лично нужен, Russian Online сдесь непричём.
Код конечно смотрите:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ScktComp;
type
TForm1 = class(TForm)
svSocket: TServerSocket;
clSocket: TClientSocket;
mmOutput: TMemo;
mmInput: TMemo;
btnSend: TButton;
Bevel1: TBevel;
edtHost: TEdit;
Label1: TLabel;
procedure mmInputKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure btnSendClick(Sender: TObject);
procedure svSocketListen(Sender: TObject; Socket: TCustomWinSocket);
procedure svSocketClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
procedure svSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure svSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure svSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure svSocketAccept(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses StrUtils;
{$R *.dfm}
procedure log(s: String);
begin
Form1.mmOutput.Lines.Add(s);
end;
procedure TForm1.mmInputKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if(ssCtrl in Shift)and(Key=VK_RETURN)then
btnSend.Click;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
svSocket.Active := true;
if(svSocket.Socket.Connected)then
log('Сообщения прослушиваются')
else
log('Ошибка инициализации прослушивания');
end;
procedure TForm1.btnSendClick(Sender: TObject);
var
msg: String;
t: Cardinal;
Begin
t := GetTickCount;
msg := mmInput.Lines.Text;
clSocket.Host := edtHost.Text;
try
clSocket.Active := true;
if(clSocket.Socket.Connected)then begin
log(svSocket.Socket.LocalHost+': '+msg);
clSocket.Socket.SendText('msg:'+msg);
end;
finally
clSocket.Active := false;
mmInput.Lines.Clear;
log('SendTime: '+IntToStr(GetTickCount-t)+' ms');
end;
end;
procedure TForm1.svSocketListen(Sender: TObject; Socket: TCustomWinSocket);
begin
log('listen: '+Socket.RemoteHost);
end;
procedure TForm1.svSocketClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
log('clWrite: '+Socket.RemoteHost);
end;
procedure TForm1.svSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
cmd,msg: String;
begin
cmd := Socket.ReceiveText;
msg := AnsiMidStr(cmd,4,length(cmd));
if(AnsiStartsText('msg:',cmd))then begin
//message
log(' ] '+Socket.RemoteHost+': '+msg);
end;
end;
procedure TForm1.svSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
log('clConnect: '+Socket.RemoteHost);
end;
procedure TForm1.svSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
log('clDisconnnect: '+Socket.RemoteHost);
end;
procedure TForm1.svSocketAccept(Sender: TObject; Socket: TCustomWinSocket);
var
s: String;
begin
log(' ] Message from '+Socket.RemoteHost);
s := Socket.ReceiveText;
while s<>'' do begin
log(' '+s);
s := Socket.ReceiveText;
end;
log(' [------------------------]');
end;
end.
знаю это самое лёгкое, но я впринципе тока вчера занялся изучением сетевой части в Delphi 7