TclientSocket和TserverSocket用法Word文档下载推荐.docx

上传人:b****4 文档编号:6446361 上传时间:2023-05-06 格式:DOCX 页数:23 大小:18.21KB
下载 相关 举报
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第1页
第1页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第2页
第2页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第3页
第3页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第4页
第4页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第5页
第5页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第6页
第6页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第7页
第7页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第8页
第8页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第9页
第9页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第10页
第10页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第11页
第11页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第12页
第12页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第13页
第13页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第14页
第14页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第15页
第15页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第16页
第16页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第17页
第17页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第18页
第18页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第19页
第19页 / 共23页
TclientSocket和TserverSocket用法Word文档下载推荐.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

TclientSocket和TserverSocket用法Word文档下载推荐.docx

《TclientSocket和TserverSocket用法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《TclientSocket和TserverSocket用法Word文档下载推荐.docx(23页珍藏版)》请在冰点文库上搜索。

TclientSocket和TserverSocket用法Word文档下载推荐.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2