论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
协议族、socket类型和协议常用的组合如表2所示:
表2 系统调用三参数组合关系
协议族(af) Socket类型(type) 协议(UNIX表示) 实际协议
AF_INET Sock_DGRAM IPPROC_UDP UDP
Sock STREAM IPPROC_TCP TCP
指定本地地址使用函数bind()一一绑定
socket()系统调用创建socket时,只指定了相关五元组的协议元,没有指定其余四元(本地地址、本地端口、远地地址、远地端口),因此需要别的系统调用加以补充。
bind()将本地socket地址(包括本地主机地址和本地端口)与所创建的socket号联系起来,即将本地socket地址赋予socket,以指定本地半相关。其用于Linux性能评估的测试工具的设计与实现调用格式为: bind(sockid, localaddr, addrlen)
总的来说,各种socket地址数据结构包括两大部分:地址类型和协议地址。网络协议地址又包括主机地址和端口号。
监听— listen()
对于服务器来说,在它接受客户机的连接之前,首先要监听。只有进入了监听模式,才能接受来自客户机的连接。这一点可以通过listen()函数来实现,它的原型如下:
int listen(SOCKET s, int backlog);
各参数意义如下:
s:进行监听的套接字。
Backlog:正在等待连接的最大队列的长度。如果backlog的只为3,有4个客户机同时发出连接请求,则前3个会放在等待连接队列中,最后一个将被忽略。
如果函数成功,则返回0;否则返回SOCKET_ERROR。
当客户机和服务器的连接建立起来后,用函数send()和recv()来进行数据传输。
4基于原始套接字的设计与实现
4.1原始套接字简介
原始套接字是网络的基本构件。套接字是从 Berkeley Sockets 扩展而来的,其在继承 Berkeley Sockets 的基础上,又进行了新的扩充。这些扩充主要是提供了一些异步函数,并增加了符合WINDOWS消息驱动特性的网络事件异步选择机制。套接字由两部分组成:开发组件和运行组件。开发组件是指套接字实现文档、应用程序接口(API)引入库和一些头文件。运行组件是指套接字应用程序接口的动态链接库(WINSOCK.DLL)。它是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连听进程。套接字存在通信区域(通信区域又称地址簇)中。套接字只与同一区域套接字只支持一个中的套接字交换数据(跨区域时,需要执行某和转换进程才能实现)。WINDOWS 中的域——网际域。套接字具有类型,WINDOWS SOCKET 2.1 版本支持两种套接字:流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。本文使用的WINDOWS SOCKET 2.1 版本。