《第11章 网络编程技术.ppt》由会员分享,可在线阅读,更多相关《第11章 网络编程技术.ppt(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Delphi程序设计教程程序设计教程20052005年年 8 8月月杨长春主编清华大学出版社同名教材配套电子教案第第11章章 网络编程技术网络编程技术 11.1 11.1 11.1 11.1 Windows SocketsWindows SocketsWindows SocketsWindows Sockets简介简介简介简介 11.1.1 11.1.1 11.1.1 11.1.1 Windows SocketsWindows SocketsWindows SocketsWindows Sockets规范规范规范规范 11.1.2 11.1.2 11.1.2 11.1.2 BekeleyBek
2、eleyBekeleyBekeley套接口套接口套接口套接口 11.1.3 11.1.3 11.1.3 11.1.3 Microsoft WindowsMicrosoft WindowsMicrosoft WindowsMicrosoft Windows和针对和针对和针对和针对WindowsWindowsWindowsWindows的扩展的扩展的扩展的扩展 11.1.4 11.1.4 11.1.4 11.1.4 规范的地位规范的地位规范的地位规范的地位 11.1.5 11.1.5 11.1.5 11.1.5 曾经作过的修改曾经作过的修改曾经作过的修改曾经作过的修改 11.2 11.2 11.2
3、 11.2 网络组件网络组件网络组件网络组件 11.2.1 11.2.1 11.2.1 11.2.1 ClientSocketClientSocketClientSocketClientSocket和和和和ServerSocket ServerSocket ServerSocket ServerSocket 11.2.2 11.2.2 11.2.2 11.2.2 TCPClientTCPClientTCPClientTCPClient和和和和TCPServerTCPServerTCPServerTCPServer 11.3 11.3 11.3 11.3 网络编程举例网络编程举例网络编程举例网络
4、编程举例 本章小结本章小结本章小结本章小结 习题习题习题习题11111111 第第1111章章 网络编程技术网络编程技术 当今社会,网络的应用已经无处不在,随着计算机网络化的深入,计算机网络编程技术变得日益重要。Delphi提供了强大的网络编程的开发手段,在本章中将着重讨论Delphi 7的网络编程技术。11.1 11.1 Windows SocketsWindows Sockets简介简介 11.1.1 Windows Sockets规范 Windows Sockets规范以U.C.Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows下
5、网络编程接口。11.1.2 Bekeley套接口 Windows Sockets规范是建立在Bekeley套接口模型上的。这个模型现在已是TCP/IP网络的标准。它提供了习惯于UNIX套接口编程的程序员极为熟悉的环境,并且简化了移植现有的基于套接口的应用程序源代码的工作。Windows Sockets API也是和4.3BSD的要求一致的。11.1.3 Microsoft Windows和针对Windows的扩展 这一套Windows Sockets API能够在所有3.0以上版本的Windows和所有Windows Scokets实现上使用,所以它不仅为Windwos Sockets实现和W
6、indows Sockets应用程序提供了16位操作环境,而且也提供了32位操作环境。11.1.4规范的地位 11.1.511.1.5曾经作过的修改曾经作过的修改 1Windows Sockets 1.0 2Windows Sockets 1.1 Windows Sockets 1.1继承了Windows Sockets 1.0的准则和结构,并且仅在一些绝对必要的地方作了改动,Windows Scokets 1.1包含了一些更加清晰的说明和对Windows Sockets 1.0的小改动。此外1.1还包含了如下重大的变更:(1)加入了gethostname()这个常规调用,以便更加简单地得到主
7、机名字和地址。(2)定义DLL中小于1000的序数为Windows Sockets保留,而对大于1000的序数则没有限制。这使Windows Sockets供应商可以在DLL中加入自己的界面,而不用担心所选择的序数会和Windows Scokets将来的版本冲突。(3)增加了WSAStartup()函数和WASClearup()函数之间的关联,要求两个函数互相对应。这使得应用程序开发者和第三方DLL在使用Windows Sockets实现时不需要考虑其他程序对这套API的调用。(4)把函数intr_addr()的返回类型,从结构in_addr改为了无符号长整型。这个改变是为了适应Microso
8、ft C编译器和Borland C编译器对返回类型为四字节结构的函数的不同处理方法。(5)把WSAAsyncSelect()函数语义从“边缘触发”改为“电平触发”。这种方式大大地简化了一个应用程序对这个函数的调用。(6)改变了ioctlsocket()函数中FIONBIO的语义。如果套接口还有未完成的WSAAsyncSelect()调用,该函数将失败返回。(7)为了符合RFC 1122,在套接口选项中加入了TCP_NODELAY这一条。11.2 11.2 网网络组络组件件 11.2.1 ClientSocket和ServerSocket ClientSocket组件和ServerSocket组
9、件是用Windows下Socket编程的VCL组件,它们是学习网络编程的第一步。下面介绍一下利用这两个组件进行网络编程,在Delphi 7中编写网络程序的步骤一般可以分为以下三步:(1)组件属性设置 (2)建立与远程计算机的连接 (3)计算机之间的数据传输 客户端用如下形式:ClientSocket1.Socket.SendText(string you want to send);在服务器端采用如下形式:ServerSocket1.Socket.ReceiveText(str:string);这个函数返回接收到的字符串的长度,将字符串存储在变量str中11.2.2 11.2.2 TCPCli
10、entTCPClient和和TCPServerTCPServer 传输控制协议TCP客户端组件TCPClient与服务器端组件TCPServer是由Borland公司提供的VCL组件。11.3 11.3 网网络编络编程程举举例例 在前面介绍了关于网络编程和网络组件的一些基础知识之后,下面就通过一个示例来理解一下如何进行网络编程的,该示例实现了上传文件的功能。示例的创建步骤如下。第一步:创建一个新的应用程序,在窗体上添加2个GroupBox组件、1个ServerSocket组件、1个ClientSocket 组件、4个Button组件、1个Label组件、1个Edit组件以及1个Memo组件。具
11、体如下图11-1所示。第二步:设置窗体中组件的属性 第三步:完成上述设置后,添加如下代码:procedureprocedure TForm1.btnServerActiveClick(Sender:TObject);beginbegin ServerSocket.Active:=True;end;end;procedure TForm1.ServerSocketClientConnect(Sender:TObject;Socket:TCustomWinSocket);var c:pcon;begin c:=new(pcon);c.FileName:=;c.TotalSize:=0;c.Stat
12、us:=0;Socket.Data:=c;Socket.SendText(已经连接,请输入UPLOAD FILENAME SIZE#13#10);end;procedure TForm1.btnClientConClick(Sender:TObject);begin ClientSocket.Active:=True;with OpenDialog do begin Execute;if FileName then begin Edit1.Text:=UPLOAD+ExtractFileName(FileName)+Inttostr(GetFileSize(FileName);Label1.C
13、aption:=FileName;ClientSocket.Socket.SendText(edit1.Text);end;end;end;procedure TForm1.btnClientDisConnClick(Sender:TObject);begin ClientSocket.Active:=False;end;procedure TForm1.BtnClientSendFClick(Sender:TObject);var fs:TFileStream;Buf:pointer;begin fs:=TFileStream.Create(Label1.Caption,fmOpenRead
14、 or fmShareDenyNone);GetMem(Buf,fs.Size);fs.Seek(0,soFromBeginning);fs.ReadBuffer(Buf,fs.Size);memo1.Lines.Add(has send:+inttostr(ClientSocket.Socket.SendBuf(Buf,fs.Size);end;procedure TForm1.BtnClientSendFClick(Sender:TObject);var fs:TFileStream;Buf:pointer;begin fs:=TFileStream.Create(Label1.Capti
15、on,fmOpenRead or fmShareDenyNone);GetMem(Buf,fs.Size);fs.Seek(0,soFromBeginning);fs.ReadBuffer(Buf,fs.Size);memo1.Lines.Add(has send:+inttostr(ClientSocket.Socket.SendBuf(Buf,fs.Size);end;procedure TForm1.btnClientDisConnClick(Sender:TObject);begin ClientSocket.Active:=False;end;procedure TForm1.Btn
16、ClientSendFClick(Sender:TObject);var fs:TFileStream;Buf:pointer;begin fs:=TFileStream.Create(Label1.Caption,fmOpenRead or fmShareDenyNone);GetMem(Buf,fs.Size);fs.Seek(0,soFromBeginning);fs.ReadBuffer(Buf,fs.Size);memo1.Lines.Add(has send:+inttostr(ClientSocket.Socket.SendBuf(Buf,fs.Size);end;procedu
17、re TForm1.BtnClientSendFClick(Sender:TObject);var fs:TFileStream;Buf:pointer;begin fs:=TFileStream.Create(Label1.Caption,fmOpenRead or fmShareDenyNone);GetMem(Buf,fs.Size);fs.Seek(0,soFromBeginning);fs.ReadBuffer(Buf,fs.Size);memo1.Lines.Add(has send:+inttostr(ClientSocket.Socket.SendBuf(Buf,fs.Size);end;第四步:至此,演示程序编写完成,本章小结本章首先介绍了Windows Sockets的一些概念,接着重点介绍了几个重要的网络组件,最后举例说明了网络编程的应用。通过对本章的学习,读者应该对Delphi中的网络编程有一个初步的了解。习题习题1111 11-1 简述ClientSocket和ServerSocket组件的主要属性。11-2 简述TcpClient与TcpServer组件的主要属性、方法和事件。11-3 请编写一个简单的网络聊天程序,要求该程序兼具客户端和服务器端的功能。11-4 试编写一个程序探测局域网上的主机。