TclientSocket和TserverSocket用法Word文档下载推荐.docx
- 文档编号:6446361
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:23
- 大小:18.21KB
TclientSocket和TserverSocket用法Word文档下载推荐.docx
《TclientSocket和TserverSocket用法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《TclientSocket和TserverSocket用法Word文档下载推荐.docx(23页珍藏版)》请在冰点文库上搜索。
CName:
string;
//客户端计算机名称
CAddress:
//客户端计算机IP地址
CUsed:
boolean;
//客户端联机标志
end;
利用这个记录类型数据保存客户端的信息,同时保存当前客户端的连接状态。
其中,CHandle保存客户端套接字句
柄,以便准确定位每个与服务器端保持连接的客户端;
Csocket保存客户端套接字,通过它可以对客户端进行回
复。
Cused记录当前客户端是否与服务器端保持连接。
下面对组件ServerSocket和ClientSocket的属性设置简单说明。
ServerSocket的属性:
·
Port,是通信的端口,必须设置。
在本例中设置为1025;
ServerTypt,服务器端读写信息类型,设置为stNonBlocking表示异步读写信息,本例中采用这种方式。
ThreadCacheSize,客户端的最大连接数,就是服务器端最多允许多少客户端同时连接。
本例采用默认值10。
其它属性采用默认设置即可。
ClientSocket的属性:
Port,是通信的端口,必须与服务器端的设置相同。
ClientType,客户端读写信息类型,应该与服务器端的设置相同,为stNonBlocking表示异步读写信息。
Host,客户端要连接的服务器的IP地址。
必须设置,当然也可以在代码中动态设置。
程序源代码:
服务器端源码(uServerMain.pas):
unituServerMain;
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,
ScktComp,ToolWin,ComCtrls,ExtCtrls,StdCtrls,Buttons;
const
CMax=10;
//客户端最大连接数
TfrmServerMain=class(TForm)
ServerSocket:
TServerSocket;
ControlBar1:
TControlBar;
ToolBar1:
TToolBar;
tbConnect:
TToolButton;
tbClose:
tbDisconnected:
Edit1:
TEdit;
Memo1:
TMemo;
StatusBar:
TStatusBar;
proceduretbConnectClick(Sender:
TObject);
proceduretbDisconnectedClick(Sender:
procedureServerSocketClientRead(Sender:
TObject;
Socket:
TCustomWinSocket);
procedureServerSocketListen(Sender:
procedureServerSocketClientConnect(Sender:
procedureServerSocketClientDisconnect(Sender:
proceduretbCloseClick(Sender:
procedureFormCreate(Sender:
procedureFormClose(Sender:
varAction:
TCloseAction);
procedureServerSocketGetSocket(Sender:
Socket:
Integer;
varClientSocket:
TServerClientWinSocket);
procedureServerSocketClientError(Sender:
TCustomWinSocket;
ErrorEvent:
TErrorEvent;
varErrorCode:
Integer);
private
{Privatedeclarations}
public
{Publicdeclarations}
session:
array[0..CMax]ofclient_record;
//客户端连接数组
Sessions:
//客户端连接数
var
frmServerMain:
TfrmServerMain;
implementation
{$R*.DFM}
//打开套接字连接,并使套接字进入监听状态
procedureTfrmServerMain.tbConnectClick(Sender:
begin
ServerSocket.Open;
//关闭套接字连接,不再监听客户端的请求
procedureTfrmServerMain.tbDisconnectedClick(Sender:
ServerSocket.Close;
StatusBar.Panels[0].Text:
=服务器套接字连接已经关闭,无法接受客户端的连接请求.;
//从客户端读取信息
procedureTfrmServerMain.ServerSocketClientRead(Sender:
i:
integer;
//将从客户端读取的信息添加到Memo1中
Memo1.Lines.Add(Socket.ReceiveText);
fori:
=0tosessionsdo
//取得匹配的客户端
ifsession[i].CHandle=Socket.SocketHandlethen
session[i].CSocket.SendText(回复客户端+session[i].CAddress+==>
+Edit1.Text);
//服务器端套接字进入监听状态,以便监听客户端的连接
procedureTfrmServerMain.ServerSocketListen(Sender:
=等待客户端连接...;
//当客户端连接到服务器端以后
procedureTfrmServerMain.ServerSocketClientConnect(Sender:
i,j:
j:
=-1;
//在原有的客户端连接数组中有中断的客户端连接
ifnotsession[i].CUsedthen
session[i].CHandle:
=Socket.SocketHandle;
//客户端套接字句柄
session[i].CSocket:
=Socket;
session[i].CName:
=Socket.RemoteHost;
session[i].CAddress:
=Socket.RemoteAddress;
//客户端计算机IP
session[i].CUsed:
=True;
//连接数组当前位置已经占用
Break;
=i;
ifj=sessionsthen
inc(sessions);
session[j].CHandle:
session[j].CSocket:
session[j].CName:
session[j].CAddress:
session[j].CUsed:
=客户端+Socket.RemoteHost+已经连接;
//当客户端断开连接时
procedureTfrmServerMain.ServerSocketClientDisconnect(Sender:
ifsession[i].CHandle=Socket.SocketHandlethen
=0;
=False;
=客户端+Socket.RemoteHost+已经断开;
//关闭窗口
procedureTfrmServerMain.tbCloseClick(Sender:
Close;
procedureTfrmServerMain.FormCreate(Sender:
sessions:
=0;
procedureTfrmServerMain.FormClose(Sender:
varAction:
ServerSocket.Close;
//当客户端正在与服务器端连接时
procedureTfrmServerMain.ServerSocketGetSocket(Sender:
varClientSocket:
=客户端正在连接...;
//客户端发生错误
procedureTfrmServerMain.ServerSocketClientError(Sender:
=客户端+Socket.RemoteHost+发生错误!
;
ErrorCode:
end.
客户端源码(uClientMain.pas):
unituClientMain;
ScktComp,ComCtrls,ToolWin,ExtCtrls,StdCtrls,Buttons;
SocketHost=172.16.1.6;
//服务器端地址
TfrmClientMain=class(TForm)
tbConnected:
tbSend:
ClientSocket:
TClientSocket;
btnSend:
TBitBtn;
proceduretbConnectedClick(Sender:
procedureClientSocketRead(Sender:
proceduretbSendClick(Sender:
procedureFormShow(Sender:
procedureClientSocketConnect(Sender:
procedureClientSocketConnecting(Sender:
procedureClientSocketDisconnect(Sender:
procedureClientSocketError(Sender:
ErrorEvent:
varErrorCode:
frmClientMain:
TfrmClientMain;
//打开套接字连接
procedureTfrmClientMain.tbConnectedClick(Sender:
ClientSocket.Open;
//关闭套接字连接
procedureTfrmClientMain.tbDisconnectedClick(Sender:
ClientSocket.Close;
//接受服务器端的回复
procedureTfrmClientMain.ClientSocketRead(Sender:
//发送信息到服务器端
procedureTfrmClientMain.tbSendClick(Sender:
ClientSocket.Socket.SendText(Edit1.Text);
procedureTfrmClientMain.tbCloseClick(Sender:
//设置要连接的服务器端地址
procedureTfrmClientMain.FormShow(Sender:
ClientSocket.Host:
=SocketHost;
//已经连接到服务器端
procedureTfrmClientMain.ClientSocketConnect(Sender:
tbSend.Enabled:
tbDisconnected.Enabled:
=True;
btnSend.Enabled:
=已经连接到+Socket.RemoteHost;
//正在连接到服务器端
procedureTfrmClientMain.ClientSocketConnecting(Sender:
=正在连接到服务器...;
//当断开与服务器端的连接时发生
procedureTfrmClientMain.ClientSocketDisconnect(Sender:
=已经断开与+Socket.RemoteHost+的连接;
procedureTfrmClientMain.FormClose(Sender:
ClientSocket.Close;
//当与服务器端的连接发生错误时
procedureTfrmClientMain.ClientSocketError(Sender:
=与服务器端的连接发生错误;
小结
上述方法是比较简单的实现方法,同时也是相对较容易理解的方法。
通过这个方法,笔者成功实现了局域网内多个
客户端与服务器端进行Socket通信的功能,同时可以保证一个客户端的连接、通信或是断开都不影响其它客户端的
正常通信。
附录:
服务器端窗体和客户端窗体及组件的属性设置参加相应的DFM文件。
uServerMain.pas对应的DFM文件(uServerMain.dfm)
objectfrmServerMain:
TfrmServerMain
Left=297
Top=258
BorderIcons=[biSystemMenu,biMinimize]
BorderStyle=bsSingle
Caption=ServerSocket
ClientHeight=279
ClientWidth=476
Color=clBtnFace
Font.Charset=DEFAULT_CHARSET
Font.Color=clWindowText
Font.Height=-11
Font.Name=MSSansSerif
Font.Style=[]
OldCreateOrder=False
OnClose=FormClose
OnCreate=FormCreate
PixelsPerInch=96
TextHeight=13
objectControlBar1:
TControlBar
Left=0
Top=0
Width=476
Height=30
Align=alTop
AutoSize=True
TabOrder=0
objectToolBar1:
TToolBar
Left=11
Top=2
Width=459
Height=22
ButtonHeight=21
ButtonWidth=55
Caption=ToolBar1
EdgeInner=esNone
EdgeOuter=esNone
Flat=True
ShowCaptions=True
objecttbConnect:
TToolButton
Caption=连接
ImageIndex=0
OnClick=tbConnectClick
end
objecttbDisconnected:
T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TclientSocket TserverSocket 用法