我刚作的 服务器和客户端在一起 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ImgList, Menus, ToolWin, ComCtrls, ExtCtrls, StdCtrls, ScktComp;type Tw_cww = class(TForm) ImageList: TImageList; MainMenu1: TMainMenu; listen11: TMenuItem; AboutSystem11: TMenuItem; Listen1: TMenuItem; Connect1: TMenuItem; Disconnect1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; ToolBar1: TToolBar; StatusBar1: TStatusBar; Panel1: TPanel; Memo1: TMemo; Splitter1: TSplitter; Memo2: TMemo; Splitter2: TSplitter; Panel2: TPanel; Panel3: TPanel; Memo3: TMemo; ClientSocket: TClientSocket; ServerSocket: TServerSocket; Timer1: TTimer; ToolButton_listen: TToolButton; ToolButton_connect: TToolButton; ToolButton_disconnect: TToolButton; ToolButton_aboutsystem: TToolButton; ToolButton_exit: TToolButton; ToolButton6: TToolButton; procedure ToolButton_listenClick(Sender: TObject); procedure ToolButton_connectClick(Sender: TObject); procedure ToolButton_disconnectClick(Sender: TObject); procedure ToolButton_aboutsystemClick(Sender: TObject); procedure ToolButton_exitClick(Sender: TObject); procedure StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); procedure Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ServerSocketAccept(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } isserver:boolean; server:string; membername:string; procedure refresh_memo3; public { Public declarations } end;var w_cww: Tw_cww;implementationuses Unit2;{$R *.dfm}procedure tw_cww.refresh_memo3; var i:integer; begin w_cww.Memo3.Lines.Clear; w_cww.Memo3.Lines.Add(membername+'['+w_cww.ServerSocket.Socket.LocalHost+'](主席)');for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do begin w_cww.Memo3.Lines.Add(w_cww.ServerSocket.Socket.Connections[i].RemoteHost+'(成员)');end; end;procedure Tw_cww.ToolButton_listenClick(Sender: TObject); beginif isserver then begin w_cww.listen11.Enabled:=true; w_cww.ToolButton_listen.Enabled:=true;w_cww.listen11.Checked:=true; w_cww.ToolButton_listen.Down:=true; w_cww.ToolButton_connect.Enabled:=false; w_cww.ToolButton_disconnect.Enabled:=false;w_cww.Connect1.Enabled:=false; w_cww.Disconnect1.Enabled:=false;end else begin w_cww.listen11.Enabled:=false; w_cww.ToolButton_listen.Enabled:=false;w_cww.ToolButton_connect.Enabled:=true; w_cww.ToolButton_disconnect.Enabled:=true;w_cww.Connect1.Enabled:=true; w_cww.Disconnect1.Enabled:=true;end;if w_cww.listen11.Checked then begin showmessage('lasjfdal'); w_cww.ClientSocket.Active:=false; w_cww.ServerSocket.Active:=true; w_cww.StatusBar1.Panels[2].Text:='本机是服务器正在监听....'; end else begin if w_cww.ServerSocket.Active then w_cww.ServerSocket.Active:=false; w_cww.StatusBar1.Panels[2].Text:='本机是客户进程'; end;end;procedure Tw_cww.ToolButton_connectClick(Sender: TObject); beginif(sender is TMenuItem) then begin w_cww.Connect1.Checked:=not w_cww.Connect1.Checked; w_cww.ToolButton_connect.Down:=w_cww.Connect1.Checked; end else beginw_cww.Connect1.Checked:=w_cww.ToolButton_connect.Down; if w_cww.Connect1.Checked then begin if w_cww.ClientSocket.Active then w_cww.ClientSocket.Active:=false;with w_cww.ClientSocket do begin //host:=server; w_cww.ClientSocket.Port:=462110; w_cww.ClientSocket.Address:='172.16.92.200'; try active:=true; w_cww.StatusBar1.Panels[2].Text:='本机是客户进程,连接成功'; except showmessage('连接失败'); end; end; end; end; end;procedure Tw_cww.ToolButton_disconnectClick(Sender: TObject); beginif (sender is TMenuItem) then begin w_cww.Disconnect1.Checked:=not w_cww.Disconnect1.Checked; w_cww.ToolButton_disconnect.Down:=w_cww.Disconnect1.Checked; end else begin w_cww.Disconnect1.Checked:=w_cww.ToolButton_disconnect.Down;if w_cww.Disconnect1.Checked then begin try w_cww.ClientSocket.Active:=false; w_cww.StatusBar1.Panels[2].Text:='断开连接';except showmessage('断开连接失败!');end;end;end; end;procedure Tw_cww.ToolButton_aboutsystemClick(Sender: TObject); begin aboutbox.ShowModal; end;
procedure Tw_cww.ToolButton_exitClick(Sender: TObject); begin w_cww.ClientSocket.Active:=false; w_cww.ServerSocket.Active:=false; close; end;procedure Tw_cww.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); var oldcolor:Tcolor; oldstyle:Tbrushstyle; begin if panel.Index=3 then begin with w_cww.StatusBar1.Canvas do begin oldcolor:=font.Color; oldstyle:=brush.Style; brush.Style:=bsclear; font.Color:=clyellow; font.Name:='隶书'; font.Height:=20; w_cww.ImageList.draw(w_cww.StatusBar1.Canvas,Rect.left+5,Rect.top+1,8); font.Color:=clblue; TextOut(Rect.Left+40,Rect.Top+5,panel.Text); font.Color:=clyellow; textout(rect.Left+42,rect.Top+7,panel.Text); font.Color:=oldcolor; brush.Style:=oldstyle; end; end;end;procedure Tw_cww.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var i:integer; begin if key=vk_return then begin if isserver then begin for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do begin //w_cww.ServerSocket.Socket.Connections[i].SendText('讨论'+w_cww.Memo1.Lines[w_cww.Memo1.Lines.Count-1]+'['+membername+']'+w_cww.Memo1.Lines.Text); w_cww.ServerSocket.Socket.Connections[i].SendText('讨论'+'['+membername+']'+w_cww.Memo1.Lines.Text); end; end else showmessage('client'); // w_cww.ClientSocket.Socket.SendText('讨论'+w_cww.Memo1.Lines[w_cww.Memo1.Lines.Count-1]+'['+membername+']'); w_cww.ClientSocket.Socket.SendText('讨论'+'['+membername+']'+w_cww.Memo1.Lines.Text); end;end;procedure Tw_cww.ServerSocketAccept(Sender: TObject; Socket: TCustomWinSocket); begin refresh_memo3; end;procedure Tw_cww.ServerSocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin refresh_memo3; end;procedure Tw_cww.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); var ss1,ss2:string; ll,i :integer; begin ss1:=socket.ReceiveText; ll:=length(ss1); ss2:=copy(ss1,7,ll-6); //w_cww.Memo2.Lines.Add(ss2); w_cww.Memo2.Lines.Add(ss2); for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do begin // if (w_cww.ServerSocket.Socket.Connections[i]<>socket) then //w_cww.ServerSocket.Socket.Connections[i].SendText('[讨论]'+ss2); w_cww.ServerSocket.Socket.Connections[i].SendText('[讨论]'+ss1); end; w_cww.Memo3.Lines.Add(ss1);//jiadeend;procedure Tw_cww.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket); beginw_cww.StatusBar1.Panels[2].Text:='本机是客户进程,已经连接到:'+socket.RemoteHost; end;procedure Tw_cww.ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin w_cww.Memo1.Clear; w_cww.Memo2.Clear; w_cww.Memo3.Clear; end;procedure Tw_cww.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin showmessage('服务器连接失败'); errorcode:=0; end;procedure Tw_cww.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); var cmd,ss1,ss2,ss3,ss4:string; ll,i,k:integer; begin ss1:=socket.ReceiveText; ll:=length(ss1); cmd:=copy(ss1,2,4); ss2:=copy(ss1,7,ll-6); if cmd='讨论' then begin w_cww.Memo2.Lines.Add(ss2); end else if(cmd='刷新') then begin w_cww.Memo3.Lines.Clear; end else begin k:=Pos('[信息]',ss2); while k>0 do begin ss3:=copy(ss2,1,k-1); ss2:=copy(ss2,k+6,length(ss2)-k-5); w_cww.Memo3.Lines.Add(ss3); k:=Pos('[信息]',ss2); end; //w_cww.Memo3.Lines.Add(ss2); w_cww.Memo3.Lines.Add(ss1); end;
end;procedure Tw_cww.Timer1Timer(Sender: TObject); var i,k :integer;beginif isserver then refresh_memo3;for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do w_cww.ServerSocket.Socket.Connections[i].SendText('[刷新]开始');for k:=1 to w_cww.Memo3.Lines.Count-1 do for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do //w_cww.ServerSocket.Socket.Connections[i].SendText('[信息]'+w_cww.Memo3.Lines[k-1]); w_cww.ServerSocket.Socket.Connections[i].SendText('[信息]'+w_cww.Memo3.Lines.Text);end;procedure Tw_cww.FormCreate(Sender: TObject); {var ss:integer; p1,p2:string; } begin {ss:=paramcount; if ss<3 then begin application.Terminate; end else begin p1:=lowercase(paramstr(1)); p2:=paramstr(2); membername:=paramstr(3); if p1='server' then begin isserver:=true; end else begin isserver:=false; end; server:=p2; end; w_cww.Caption:='['+membername+']'; // isserver:=true; w_cww.listen11.OnClick(nil); } isserver:=false; membername:='taotao111'; server:='192.16.92.200';//服务器ipend;end.
服务器和客户端在一起
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, Menus, ToolWin, ComCtrls, ExtCtrls, StdCtrls, ScktComp;type
Tw_cww = class(TForm)
ImageList: TImageList;
MainMenu1: TMainMenu;
listen11: TMenuItem;
AboutSystem11: TMenuItem;
Listen1: TMenuItem;
Connect1: TMenuItem;
Disconnect1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
ToolBar1: TToolBar;
StatusBar1: TStatusBar;
Panel1: TPanel;
Memo1: TMemo;
Splitter1: TSplitter;
Memo2: TMemo;
Splitter2: TSplitter;
Panel2: TPanel;
Panel3: TPanel;
Memo3: TMemo;
ClientSocket: TClientSocket;
ServerSocket: TServerSocket;
Timer1: TTimer;
ToolButton_listen: TToolButton;
ToolButton_connect: TToolButton;
ToolButton_disconnect: TToolButton;
ToolButton_aboutsystem: TToolButton;
ToolButton_exit: TToolButton;
ToolButton6: TToolButton;
procedure ToolButton_listenClick(Sender: TObject);
procedure ToolButton_connectClick(Sender: TObject);
procedure ToolButton_disconnectClick(Sender: TObject);
procedure ToolButton_aboutsystemClick(Sender: TObject);
procedure ToolButton_exitClick(Sender: TObject);
procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
procedure Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ServerSocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
isserver:boolean;
server:string;
membername:string;
procedure refresh_memo3;
public
{ Public declarations }
end;var
w_cww: Tw_cww;implementationuses Unit2;{$R *.dfm}procedure tw_cww.refresh_memo3;
var
i:integer;
begin
w_cww.Memo3.Lines.Clear;
w_cww.Memo3.Lines.Add(membername+'['+w_cww.ServerSocket.Socket.LocalHost+'](主席)');for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do
begin
w_cww.Memo3.Lines.Add(w_cww.ServerSocket.Socket.Connections[i].RemoteHost+'(成员)');end;
end;procedure Tw_cww.ToolButton_listenClick(Sender: TObject);
beginif isserver then
begin
w_cww.listen11.Enabled:=true;
w_cww.ToolButton_listen.Enabled:=true;w_cww.listen11.Checked:=true;
w_cww.ToolButton_listen.Down:=true;
w_cww.ToolButton_connect.Enabled:=false;
w_cww.ToolButton_disconnect.Enabled:=false;w_cww.Connect1.Enabled:=false;
w_cww.Disconnect1.Enabled:=false;end
else
begin
w_cww.listen11.Enabled:=false;
w_cww.ToolButton_listen.Enabled:=false;w_cww.ToolButton_connect.Enabled:=true;
w_cww.ToolButton_disconnect.Enabled:=true;w_cww.Connect1.Enabled:=true;
w_cww.Disconnect1.Enabled:=true;end;if w_cww.listen11.Checked then
begin
showmessage('lasjfdal');
w_cww.ClientSocket.Active:=false;
w_cww.ServerSocket.Active:=true;
w_cww.StatusBar1.Panels[2].Text:='本机是服务器正在监听....';
end
else
begin
if w_cww.ServerSocket.Active then
w_cww.ServerSocket.Active:=false;
w_cww.StatusBar1.Panels[2].Text:='本机是客户进程';
end;end;procedure Tw_cww.ToolButton_connectClick(Sender: TObject);
beginif(sender is TMenuItem) then
begin
w_cww.Connect1.Checked:=not w_cww.Connect1.Checked;
w_cww.ToolButton_connect.Down:=w_cww.Connect1.Checked;
end
else
beginw_cww.Connect1.Checked:=w_cww.ToolButton_connect.Down;
if w_cww.Connect1.Checked then
begin
if w_cww.ClientSocket.Active then
w_cww.ClientSocket.Active:=false;with w_cww.ClientSocket do
begin
//host:=server;
w_cww.ClientSocket.Port:=462110;
w_cww.ClientSocket.Address:='172.16.92.200';
try active:=true;
w_cww.StatusBar1.Panels[2].Text:='本机是客户进程,连接成功';
except
showmessage('连接失败');
end;
end;
end;
end;
end;procedure Tw_cww.ToolButton_disconnectClick(Sender: TObject);
beginif (sender is TMenuItem) then
begin
w_cww.Disconnect1.Checked:=not w_cww.Disconnect1.Checked;
w_cww.ToolButton_disconnect.Down:=w_cww.Disconnect1.Checked;
end
else
begin
w_cww.Disconnect1.Checked:=w_cww.ToolButton_disconnect.Down;if w_cww.Disconnect1.Checked then
begin
try w_cww.ClientSocket.Active:=false;
w_cww.StatusBar1.Panels[2].Text:='断开连接';except
showmessage('断开连接失败!');end;end;end; end;procedure Tw_cww.ToolButton_aboutsystemClick(Sender: TObject);
begin
aboutbox.ShowModal;
end;
procedure Tw_cww.ToolButton_exitClick(Sender: TObject);
begin
w_cww.ClientSocket.Active:=false;
w_cww.ServerSocket.Active:=false;
close;
end;procedure Tw_cww.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
var
oldcolor:Tcolor;
oldstyle:Tbrushstyle; begin
if panel.Index=3 then
begin
with w_cww.StatusBar1.Canvas do begin
oldcolor:=font.Color;
oldstyle:=brush.Style;
brush.Style:=bsclear;
font.Color:=clyellow;
font.Name:='隶书';
font.Height:=20;
w_cww.ImageList.draw(w_cww.StatusBar1.Canvas,Rect.left+5,Rect.top+1,8); font.Color:=clblue;
TextOut(Rect.Left+40,Rect.Top+5,panel.Text); font.Color:=clyellow;
textout(rect.Left+42,rect.Top+7,panel.Text); font.Color:=oldcolor;
brush.Style:=oldstyle; end;
end;end;procedure Tw_cww.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i:integer;
begin if key=vk_return then
begin if isserver then
begin
for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do
begin //w_cww.ServerSocket.Socket.Connections[i].SendText('讨论'+w_cww.Memo1.Lines[w_cww.Memo1.Lines.Count-1]+'['+membername+']'+w_cww.Memo1.Lines.Text); w_cww.ServerSocket.Socket.Connections[i].SendText('讨论'+'['+membername+']'+w_cww.Memo1.Lines.Text); end; end
else
showmessage('client');
// w_cww.ClientSocket.Socket.SendText('讨论'+w_cww.Memo1.Lines[w_cww.Memo1.Lines.Count-1]+'['+membername+']');
w_cww.ClientSocket.Socket.SendText('讨论'+'['+membername+']'+w_cww.Memo1.Lines.Text);
end;end;procedure Tw_cww.ServerSocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
begin
refresh_memo3;
end;procedure Tw_cww.ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
refresh_memo3;
end;procedure Tw_cww.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ss1,ss2:string;
ll,i :integer;
begin
ss1:=socket.ReceiveText;
ll:=length(ss1);
ss2:=copy(ss1,7,ll-6);
//w_cww.Memo2.Lines.Add(ss2);
w_cww.Memo2.Lines.Add(ss2); for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do begin
// if (w_cww.ServerSocket.Socket.Connections[i]<>socket) then
//w_cww.ServerSocket.Socket.Connections[i].SendText('[讨论]'+ss2);
w_cww.ServerSocket.Socket.Connections[i].SendText('[讨论]'+ss1);
end; w_cww.Memo3.Lines.Add(ss1);//jiadeend;procedure Tw_cww.ClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
beginw_cww.StatusBar1.Panels[2].Text:='本机是客户进程,已经连接到:'+socket.RemoteHost;
end;procedure Tw_cww.ClientSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
w_cww.Memo1.Clear;
w_cww.Memo2.Clear;
w_cww.Memo3.Clear;
end;procedure Tw_cww.ClientSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
showmessage('服务器连接失败');
errorcode:=0;
end;procedure Tw_cww.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
cmd,ss1,ss2,ss3,ss4:string;
ll,i,k:integer; begin ss1:=socket.ReceiveText;
ll:=length(ss1);
cmd:=copy(ss1,2,4);
ss2:=copy(ss1,7,ll-6);
if cmd='讨论' then
begin
w_cww.Memo2.Lines.Add(ss2);
end
else if(cmd='刷新') then
begin
w_cww.Memo3.Lines.Clear;
end
else
begin k:=Pos('[信息]',ss2);
while k>0 do
begin
ss3:=copy(ss2,1,k-1);
ss2:=copy(ss2,k+6,length(ss2)-k-5);
w_cww.Memo3.Lines.Add(ss3);
k:=Pos('[信息]',ss2);
end;
//w_cww.Memo3.Lines.Add(ss2);
w_cww.Memo3.Lines.Add(ss1);
end;
end;procedure Tw_cww.Timer1Timer(Sender: TObject);
var
i,k :integer;beginif isserver then
refresh_memo3;for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do
w_cww.ServerSocket.Socket.Connections[i].SendText('[刷新]开始');for k:=1 to w_cww.Memo3.Lines.Count-1 do
for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do
//w_cww.ServerSocket.Socket.Connections[i].SendText('[信息]'+w_cww.Memo3.Lines[k-1]);
w_cww.ServerSocket.Socket.Connections[i].SendText('[信息]'+w_cww.Memo3.Lines.Text);end;procedure Tw_cww.FormCreate(Sender: TObject);
{var
ss:integer;
p1,p2:string;
}
begin {ss:=paramcount;
if ss<3 then
begin
application.Terminate;
end
else
begin
p1:=lowercase(paramstr(1));
p2:=paramstr(2);
membername:=paramstr(3);
if p1='server' then
begin
isserver:=true;
end
else
begin
isserver:=false;
end;
server:=p2;
end; w_cww.Caption:='['+membername+']';
// isserver:=true;
w_cww.listen11.OnClick(nil); }
isserver:=false;
membername:='taotao111';
server:='192.16.92.200';//服务器ipend;end.