第4章TCPSocket编程

上传人:豆浆 文档编号:47024019 上传时间:2018-06-29 格式:PPT 页数:38 大小:308KB
返回 下载 相关 举报
第4章TCPSocket编程_第1页
第1页 / 共38页
第4章TCPSocket编程_第2页
第2页 / 共38页
第4章TCPSocket编程_第3页
第3页 / 共38页
第4章TCPSocket编程_第4页
第4页 / 共38页
第4章TCPSocket编程_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《第4章TCPSocket编程》由会员分享,可在线阅读,更多相关《第4章TCPSocket编程(38页珍藏版)》请在金锄头文库上搜索。

1、第4章 TCPSocket编程 了解以太网通信与计算机硬件的关系 了解TCP/IP协议与以太网通信的关系 了解客户/服务器的概念 掌握Winsock构件的属性、事件、方法之 间的关系 掌握通过Delphi 6.0制作简单客户/服务 器通信程序的方法 掌握通过Visual Basic 6.0制作简单客户 /服务器通信程序的方法 通过通信实验了解不同语言的通信编程之 间的字符编码差异图4-1 操作系统中关于以太网卡的信息打开每台计算机的IP地 址都不一样子网掩码一般都是 255.255.255.0图4-2 Windows98/me 网络属 性图4-3 Windows98/me IP地址设置图4-4

2、 Windows Xp中的TCP/IP属性对话框图4-5网路连通测试成功图4-6 网路连通测试失败4.2.2 客户与服务器现实中所有信息交换都是基于客户(Client)与 服务器(Server)模式的,称为C/S模型。所谓服 务器是指,它总是处于被动状态,等待客户的询问 ,负责应答。这也正像我们出外旅游时住旅店一样 ,旅店服务员总是在等待着我们客户。客户总是处 于主动地位,在启动时客户总是首先向服务器发出 联络信号,然后等待服务器的回答。一个服务器可 能同时为许多客户提供服务。在设计程序时,到底 谁作客户,谁作服务器要看具体的情况而定。 计算机网络通信总是以客户(Client)与服务器 (Se

3、rver)方式进行的。4.2.3 阻塞与非阻塞 在Winsock中套接字可以是阻塞方式,也可以是 非阻塞方式。处于阻塞方式的套接字的函数,在 完成其任务之前是不会返回的。这样,在该函数 调用返回前,这个套接字就不能进行其他任何操 作,调用它的进程也会处于挂起状态,所以称为 阻塞方式。例如,在调用ReceiveBuf()函数时, 可能要花费相当长的时间来等待数据的到来,在 这段时间内,调用ReceiveBuf ()的进程就无法 继续执行。特别是在某些情况下,当发送方的数 据根本无法到达时,该进程就会无限地等待下去 。除此之外,当用户在长时间等待后失去耐心而 试图关闭程序时,还会导致系统限于危险境

4、地。 BerkeleySocket的很多函数都是阻塞方式的。4.3.1 Delphi 6.0 的 ClientSocket Delphi 6.0中的Winsock有客户套节字( ClientSocket、TcpClient)和服务器套节 字(ServerSocket、TcpServer)之分。 ClientSocket和ServerSocket里面均包含 一个Socket对象,真正用来通信的方法在 Socket里面。下面分别讨论客户套节字的 属性、事件、方法。图4-7 Delphi 6中网络客户套接字属性图4-8 Delphi 6中网络客户套接字事件其中关键方法有: function Rece

5、iveLength: Integer; function Socket.ReceiveBuf(var Buf; Count: Integer): Integer; function Socket.SendBuf(var Buf; Count: Integer): Integer; 这两个方法可以接收和发送二进制的数据 也可以发送字符串数据,与Record类型配 合可以完成各种数据的操作。4.3.2 Delphi 6 中的ServerSocket图4-10 Delphi 6中网络服务器套接字事件图4-9 Delphi 6中网络服务器套接字属性其中关键方法有: function ReceiveLe

6、ngth: Integer; function Socket.ReceiveBuf(var Buf; Count: Integer): Integer; function Socket.SendBuf(var Buf; Count: Integer): Integer; 这两个方法可以接收和发送二进制的数据也可以发送字符 串数据,与Record类型配合可以完成各种数据的操作。 通信前必须先连接,连接前必须把客户的Address或Host 设为服务器计算机的IP地址,客户的Port与服务器的Port 必须相等,服务器的Active必须设为true。具体的连接动 作就是客户的Active:=tru

7、e。当连接成功后,客户的 OnConnect事件发生。 应当注意,一个服务器Socket可供若干个客户连接。服 务器Socket中专门有一个记录数组Connections记录客 户的连接情况。 客户通过SendBuf发送的信息由服务器的OnClientRead 事件调用ReceiveBuf接收,服务器通过SendBuf发送的 信息由客户的OnRead事件调用ReceiveBuf接收。4.3.3 Visual Basic 6.0的 Winsock 数据传输协议允许创建和维护与远程计算机的连接。连接 两台计算机就可彼此进行数据传输。在Visual Basic 6.0 中的Winsock没有客户与服

8、务器之分。它既可以当客户用 ,也可以做服务器用,完全靠Winsock内的属性、方法、 事件的具体配合。 如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的 端口(RemotePort 属性),然后调用 Connect 方法。 如果创建服务器应用程序,就应设置一个收听端口( LocalPort 属性)并调用 Listen 方法。当客户计算机需 要连接时就会发生 ConnectionRequest 事件。为了完 成连接,可调用 ConnectionRequest 事件内的 Accept 方法。图4-11 Visual Basic 6

9、.0 部件对话框1.属性 2.方法 3.事件 对话前先连接,服务器必须有自己的IP地址和Port号,并 且处于活动状态,等待客户随时的连接请求。 连接时,客户端先确定服务器端的IP地址和Port号,然后 调用连接的方法向服务器请求连接,服务器同意后将客户 记录在案,以后就可以互相对话。 客户通过发送方法发送信息给服务器,服务器在接收数据 的事件里通过接收数据的方法接收客户的信息。服务器通 过发送方法给客户回答信息,客户在接收数据的事件里通 过接收数据的方法接收服务器的信息。 在整个对话过程中,发送数据容易实现,接收数据较难实 现。这是因为接收数据是被动的,需要随时等待,所以这 个过程要放在接收

10、事件里,由接收事件触发接收的方法完 成接收数据的任务。属性客户服务器address指定服务器的IP地址要有确定的IPPort与服务器保持一致要有确定的Port事件客户服务器连接觉察服务器送来的已 经连 通事件觉察客户送来的请求连接事 件收到数据觉察服务器送来的数 据,调用接收数据 的方法觉察客户送来的数据,调用 接收数据的方法表4-7 属性的基本配合原则表4-8 事件的基本配合原则方法客户服务器 连接向服务器请求连接接纳接纳客户发送数据根据实际 需要随时可以进 行处理客户的请求后返回信息接收数据在收到数据的事件里进行在收到数据的事件里进行表4-9方法的基本配合原则4.4.1客户实例图4-12

11、Delphi 6设计的客户端图4-12 Delphi 6设计的客户端(1)可与服务器连接通信。 (2)运行后等待用户确定要连接的服务器的IP地址和port 号,提示“未连接”,“发送”按钮不可用。 (3)设立“断开”按钮可断开与服务器之间的连接。 (4)设立“打开”按钮可恢复与服务器之间的连接。 (5)当用户确定了服务器的IP地址和port号后,点击“连接 ”按钮进行连接。 (6)当连接成功后在屏幕上显示“连接OK”,将“发送”按钮 设为可用。 (7)当服务器断开时显示“未连接”, “发送”按钮设为不可 用。 (8)在发送文本框里键入文本,通过点击“发送”按钮发送 到服务器。 (9)在接收文本

12、框里显示来自服务器的文本信息,随时等 待服务器送来的信息。具体编程过程可分为: 连接的动作: ClientSocket1.Active:=true 发送信息的动作: ClientSocket1.Socket.SendText(信息 文本) 接收信息的动作: ClientSocket1.Socket.ReceiveText 在 事件ClientSocket1Read里进行源程序unit ClientUnit; /说明: 这是一个简单的实例, 仅仅表明属性设置, 事件编程, 连接及连 接情况, / 发送数据,接收数据的全过程. 其中的发送和接收使用的方法 / SendText和ReceiveTex

13、t 都是针对字符串的, / 现实中的数据应该是二进制数据, 应该使用 / Sendbuf和Receivebuf ,处理过程也要复杂得多 interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Buttons, ScktComp, ExtCtrls;typeTForm1 = class(TForm)ClientSocket1: TClientSocket; /客户 Socket 构件BitBtn1: TBitBtn; /连接按钮Label1

14、: TLabel; /显示连接情况Memo1: TMemo; /键入发送内容的文本编辑器Button1: TButton; /发送按钮Memo2: TMemo; /存放接收到的内容Label2: TLabel; /显示收到字符数Button2: TButton; /断开按钮Button3: TButton; /打开按钮LabeledEdit1: TLabeledEdit; /编辑IP地址LabeledEdit2: TLabeledEdit; /编辑Port号procedure BitBtn1Click(Sender: TObject);procedure ClientSocket1Connec

15、t(Sender: TObject;Socket: TCustomWinSocket);procedure ClientSocket1Disconnect(Sender: TObject;Socket: TCustomWinSocket);procedure Button1Click(Sender: TObject);procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);procedure FormShow(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);private Private declarations public Public declarations end; varForm1: TForm1; implementation $R *.dfmprocedure TForm1.BitBtn1Click(Sender: TObject); /连接按

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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