欢迎来到天天文库
浏览记录
ID:3665258
大小:225.49 KB
页数:32页
时间:2017-11-22
《基于delphi使用api实现sock通讯》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于Delphi使用API实现Sock通讯编程一、定址 要通过Winsock建立通信,必须了解如何利用指定的协议为工作站定址。Winsock2引入了几个新的、与协议无关的函数,它们可和任何一个地址家族一起使用;但是大多数情况下,各协议家族都有自己的地址解析机制,要么通过一个函数,要么作为一个投给getsockopt的选项。 因为目前网络编程中用的最多最普遍的也许就是TCP/IP协议了,所以这里主要介绍此协议下的WinSock编程。1、IP 网际协议(InternetProtocol,IP)是一种用于互联网的网络协议,已经广为
2、人知。它可广泛用于大多数计算机操作系统上,也可用于大多数局域网LAN(比如办公室小型网络)和广域网WAN(比如说互联网)。从它的设计看来,IP是一个无连接的协议,不能保证数据投递万无一失。两个比它高级的协议(TCP和UDP)用于依赖IP协议的数据通信。2、TCP 面向连接的通信是通过“传输控制协议”(TransmissionControlProtocol,TCP)来完成的。TCP提供两台计算机之间的可靠无错的数据传输。应用程序利用TCP进行通信时,源和目标之间会建立一个虚拟连接。这个连接一旦建立,两台计算机之间就可以把数据当作一个
3、双向字节流进行交换。3、UDP 无连接通信是通过“用户数据报协议”(UserDatagramProtocol,UDP)来完成的。UDP不保障可靠数据的传输,但能够向若干个目标发送数据,接收发自若干个源的数据。简单地说,如果一个客户机向服务器发送数据,这一数据会立即发出,不管服务器是否已准备接收数据。如果服务器收到了客户机的数据,它不会确认收到与否。数据传输方法采用的是数据报。 TCP和UDP两者都利用IP来进行数据传输,一般称为TCP/IP和UDP/IP。Winsock通过AF_INET地址家族为IP通信定址。4、定址
4、 IP中,计算机都分配有一个IP地址,用一个32位数来表示,正式的称呼是“IPv4地址”。客户机需要通过TCP或UDP和服务器通信时,必须指定服务器的IP地址和服务端口号。另外,服务器打算监听接入客户机请求时,也必须指定一个IP地址和一个端口号。Winsock中,应用通过SOCKADDR_IN结构来指定IP地址和服务端口信息,该结构的在DELPHI中的声明如下: sockaddr_in=record caseIntegerof 0:(sin_family:u_short; sin_port:u_shor
5、t; sin_addr:TInAddr; sin_zero:array[0..7]ofChar); 1:(sa_family:u_short; sa_data:array[0..13]ofChar) end; TSockAddrIn=sockaddr_in; 在DELPHI中,sockaddr_in结构被声明为了一个变体记录(关于变体记录可以参看我其他的文章)。sin_family:字段必须设为AF_INET,以告知Winsock我们此时正在使用IP地址家族。
6、准备使用哪个TCP或UDP通信端口来标识服务器服务这一问题,则由sin_port字段定义。在选择端口时,应用必须特别小心,因为有些可用端口号是为“已知的”(即固定的)服务保留的(比如说文件传输协议和超文本传输协议,即FTP和HTTP)。“已知的协议”,即固定协议,采用的端口由“互联网编号分配认证(IANA)”控制和分配,RFC1700中说明编号。从本质上说,端口号分为下面这三类:“已知”端口、已注册端口、动态和(或)私用端口。■0~1023由IANA控制,是为固定服务保留的。■1024~49151是IANA列出来的、已注册的端口,供普通用户
7、的普通用户进程或程序使用。■49152~65535是动态和(或)私用端口。 普通用户应用应该选择1024~49151之间的已注册端口,从而避免端口号已被另一个应用或系统服务所用。此外,49152~65535之间的端口可自由使用,因为IANA这些端口上没有注册服务。在使用bindAPI函数时,如果一个应用和主机上的另一个应用采用的端口号绑定在一起,系统就会返回Winsock错误WSAEADDRINUSE。sockaddr_in结构的sin_addr字段用于把一个IP地址保存为一个4字节的数,它是无符号长整数类型。根据这个字段的不同用法,还可
8、表示一个本地或远程IP地址。IP地址一般是用“互联网标准点分表示法”(像a.b.c.d一样)指定的,每个字母代表一个字节数,从左到右分配一个4字节的无符号长整数。最后一个字段si
此文档下载收益归作者所有