最新利用Delphi编写Socket通信程序

上传人:枫** 文档编号:488024424 上传时间:2023-10-01 格式:DOC 页数:38 大小:222KB
返回 下载 相关 举报
最新利用Delphi编写Socket通信程序_第1页
第1页 / 共38页
最新利用Delphi编写Socket通信程序_第2页
第2页 / 共38页
最新利用Delphi编写Socket通信程序_第3页
第3页 / 共38页
最新利用Delphi编写Socket通信程序_第4页
第4页 / 共38页
最新利用Delphi编写Socket通信程序_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《最新利用Delphi编写Socket通信程序》由会员分享,可在线阅读,更多相关《最新利用Delphi编写Socket通信程序(38页珍藏版)》请在金锄头文库上搜索。

1、最新利用Delphi编写Socket通信程序Indy10Install All packages are followed by X0 (Where X is your Delphi verison).1. Download source from the Development Snapshot. Delphi / BCB Installation1. Open and compile in the following order: 2.1. IndySystem (in LibSystem) 2. IndyCore (in LibCore) 3. IndyProtocols (in Lib

2、Protocols) 4. IndySuperCore (in LibSuperCore)If you are not using SuperCore, then you do not need to compile this package. 3. Now open and click install in the following order 4.5.1. dclIndyCore (in LibCore) 2. dclIndyProtocols (in LibProtocols) 3. dclSuperCore (in LibSuperCore)Only install this if

3、you have compiled SuperCore. 利用Delphi编写Socket通信程序2022-08-24 人气:5925 出处:csdn 作者: dudunono 原作 一、Delphi与Socket计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议。TCP是面向连接的,通信双方保持一条通路,好比目前的 线,使用telnet登陆BBS,用的就是TCP协议;UDP是无连接的,通信双方都不保持对方的状态,浏览器访问Internet时使用的 协议就是基于UDP协议的。TCP和UDP协议都非常复杂,尤其是TCP协议,为了保证网络传输的正确性和有效性,

4、必须进行一系列复杂的纠错和排序等处理。Socket是建立在传输层协议(主要是TCP和UDP)上的一种套接字标准,最初是由美国加州Berkley大学提出,它定义两台计算机间进行通信的标准也是一种编程标准,如果说两台计算机是利用一个“通道“进行通信,那么这个“通道“的两端就是两个套接字。套接字屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了套接字标准的计算机之间的通信成为可能。微软的Windows Socket标准(简称winsock)对Berkley的套接字标准进行了扩展,利用标准的Socket的方法,可以同任何平台上的Socket进行通信;利用其扩展,可以更有效

5、地实现在Windows平台上计算机间的通信。在Delphi中,其底层的Socket也应该是Windows的Socket。Socket减轻了编写计算机间通信软件的难度,但总的说来还是相当复杂的这一点在后面具体会讲到;Inprise在Delphi中对Windows Socket进行了有效的封装,使得用户可以很方便地编写网络通信程序。下面我们实例解读在Delphi中如何利用Socket编写通信程序。二、利用Delphi编写Socket通信程序。下面是一个简单的Socket通信程序,其中客户机和效劳机是同一个程序,当客户机效劳器在一个memo1中输入一段文字然后敲入回车,该段文字就可以显示在效劳器(客

6、户机)的memo2中,反之亦成立。具体步骤如下:1、新建一个form,任意命名,不妨设之为chatForm;放上一个MainMenu(在Standard栏中),建立ListenItem、ConnectItem、Disconnect和Exit菜单项;在从Internet栏中选择TServerSocket、TClientSocket添加到chatForm中,其中把TClientSocket的名字设为ClientSocket, port设为1025,默认的active为false;把TServerSocket的名字设为ServerSocket,port设为1025,默认的active为false,其

7、他的不变;再放入两个memo,一个命名为memo1,另外一个命名为memo2,其中把memo2的color设置为灰色,因为主要用来显示对方的输入。下面我们一边编写代码一边解释原因。、双击ListemItem。写入如下代码:procedure TChatForm.ListenItemClick(Sender: TObject);beginListenItem.Checked := not ListenItem.Checked;if ListenItem.Checked thenbeginClientSocket.Active := False;ServerSocket.Active := Tru

8、e;endelsebeginif ServerSocket.Active thenServerSocket.Active := False;end;end;该程序段的说明如下:当用户选择ListemItem时,该ListenItem取反,如果选中的话,说明处于Listen状态,读者要了解的是:listen是Socket作为Server时一个专有的方法,如果处于listen,那么ServerSocket设置为活动状态;否那么,取消listen,那么关闭ServerSocket。实际上,只有用户一开始选择该菜单项,说明该程序用作Server。反之,如果用户选择ConnectItem,那么必然作为C

9、lient使用。、双击ConnectItem,敲入以下代码。procedure TChatForm.ConnectItemClick(Sender: TObject);beginif ClientSocket.Active then ClientSocket.Active := False;if InputQuery(Computer to connect to, Address Name:, Server) thenif Length(Server) 0 thenwith ClientSocket dobeginHost := Server;Active := True;ListenItem

10、.Checked := False;end;end;这段程序的主要功能就是当用户选择ConnectItem菜单项时,设置应用程序为客户机,弹出input框,让用户输入效劳器的地址。这也就是我们不一开始固定ClientSocket的host的原因,这样用户可以动态地连接不同的效劳器。读者需要了解的是主机地址只是Socket作为客户机时具有的一个属性,Socket作为效劳器时“一般“不用地址,因为它同本机绑定。4、在memo1的keydown方法中写入如下代码:procedure TChatForm.Memo1KeyDown(Sender: TObject; var Key: Word;Shift

11、: TShiftState);beginif Key = VK_Return thenif IsServer thenServerSocket.Socket.Connections0.SendText(Memo1.LinesMemo1.Lines.Count - 1)elseClientSocket.Socket.SendText(Memo1.LinesMemo1.Lines.Count - 1);end;该段代码的作用很明显,就是开始发消息了。其中如果是Server的话,它只向第一个客户机发消息,由于一个效劳器可以连接多个客户机,而同客户机的每一个连接都由一个Socket来维持,因此Serv

12、erSocket.Socket.Connnections数组中存储的就是同Client维持连接的Socket。在标准Socket中,效劳器方的Socket通过accept()方法的返回值获取维持同客户机连接的Socket,而发送、接受消息的方法分别为send(sendto)和recv(recvfrom), Delphi对此进行了封装。、其余代码的简要介绍。procedure TChatForm.ServerSocketAccept(Sender: TObject;Socket: TCustomWinSocket);beginIsServer := True;end;ServerSocket的A

13、ccept方法,当客户机第一次连接时完成,通过其参数可以认为,它是在标准的accept方法后执行的,因为有TCustomWinSocket这个参数类型,它应该是标准Server方Socket的返回值。 procedure TChatForm.ClientSocketRead(Sender: TObject;Socket: TCustomWinSocket);beginMemo2.Lines.Add(Socket.ReceiveText);end;procedure TChatForm.ServerSocketClientRead(Sender: TObject;Socket: TCustomW

14、inSocket);beginMemo2.Lines.Add(Socket.ReceiveText);end;这两段代码分别是效劳器方和客户机方在收到对方的消息时,由Delphi触发的,作用是在memo2中显示收到的消息。其中,ClientSocketRead中的Socket实际上就是Socket本身,而在ServerSocketClientRead中的Socket实际上是ServerSocket.Socket.Connection中的某个Socket。不过在Delphi中,对效劳器方的Socket进行了有效的封装。procedure TChatForm.ServerSocketClientC

15、onnect(Sender: TObject;Socket: TCustomWinSocket);beginMemo2.Lines.Clear;end;procedure TChatForm.ClientSocketDisconnect(Sender: TObject;Socket: TCustomWinSocket);beginListenItemClick(nil);end;这两段比较简单。其中ServerSocketClientConnect在ServerSocket收到一个新的连接时触发。而ClientSocketDisconnect在ClientSocket发出Disconncet时触发。procedure TChatForm.Exit1Click(Sender: TObject);beginServerSocket.Close;ClientSocket.Close;Close;end;procedure TChatForm.Disconnect1Click(Sender: TObject);b

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号