Winsock API 选项配置(1)
2014-04-21 01:45
导读:计算机应用论文论文,Winsock API 选项配置(1)应该怎么写,有什么格式要求,科教论文网提供的这篇文章是一个很好的范例:
摘 要 介绍了Winsock 下的网络编程API函数的网络参数以及一些基
摘 要 介绍了Winsock 下的网络编程API函数的网络参数以及一些基本的环境配置。同时也可以了解到一些基本的网络特性,给出了网络配置的基本形式,从而更好地对网络通讯进行有效地配置管理。在面对大量烦琐的网络函数与参数的同时,总结出了一些配置它们的方法。 关键词 套接字;Winsock;地址族;协议族;1 网络编程接口 为了方便网络编程,20世纪90年代初,由Microsoft联合了其他几家公司共同制定了一套Windows下的网络编程接口,即Windows Sockets规范,它不是一种网络协议,而是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。 通讯的基石是套接字,一个套接字是通讯的一端。在这一端上可以找到与其对应的一个地址名。一个正在被使用的套接字都有它的类型和与其相关的进程。套接字存在于通讯域中。通讯域可以是抽象的概念,它是套接字的一套完备的系列,最后可以通过程序来实现。套接字通常和同一个域中的套接字交换数据。Windows Sockets规范支持单一的通讯域,即Internet域。


套接字可以根据通讯性质分类,程序员可以根据具体的情况进行设置。一般我们仅在同一类的套接字间通讯。可以通过配置底层文件,让不同类型的套接字间也照样可以通讯。目前socket提供可以使用两种套接字类型,即流套接字(TCP)和数据报套接字(UDP)。流套接字提供了双向的,有序的,无重复并且无记录边界的数据流服务。他在数据传输当中保证数据的完整性和可靠性等。数据报即UDP套接字支持双向的数据流,但并不保证是可靠,有序,无重复。2 用于连接套接字API Windows Sockets 规范支持的套接字属性选项都可以在对setsockopt()函数和getsockopt()函数的配置中实现。任何关于Sockets 实现必须能够识别所有这些属性选项,并且对每一个属性选项都返回合理的数值。int setsockopt( SOCKET s, int level, int optname, const char* optval, int optlen); 一般来讲,我们可以手动地对socket进行配置,但是在大多数情况下,socket的默认配置可以解决绝大多数的网络问题,只有我们需要一些特殊的用途时才会用到它。3 套接字函数 让套接字工作,其过程如下: 服务器首先启动,通过调用socket()建立一个套接字,然后调用bind()将该套接字和本地网络地址联系在一起,再调用listen()使套接字做好侦听的准备,并规定它的请求队列的长度(这个长度通常有最大的限制),之后就调用accept()来接收连接.客户在建立套接字后就可调用connect()和服务器建立连接.一旦建立连接,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。数据收发完毕之后,调用close()关闭套接字。3.1 socket() int socket(int domain, int type, int protocol); 参数domain指定套接字使用的协议族,AF_INET表示使用TCP/IP协议族,AF_UNIX表示使用Unix协议族,AF_ISO表示套接字使用ISO协议族,一般只要使用TCP/IP就可以了。type指定套接字类型,一般的面向连接通信类型(如TCP)设置为SOCK_STREAM,当套接字为数据报类型时,type应设置为SOCK_DGRAM,如果是可以直接访问IP协议的原始套接字则type应设置为SOCK_RAW。参数protocol一般设置为"0",表示使用默认协议。当socket()函数成功执行时,返回一个对这个套接字的描述符,如果出错则返回"-1",并设置errno为相应的错误类型。 在通常情况下,首先要将描述服务器信息的套接字地址结构清零,这个地址结构将常用的地址信息储存在一个结构里面以供调用,我们可以直接在地址结构中填入相应的内容,准备接受客户机送来的连接建立请求。Winsock定义了一种通用的套接字地址结构:struct sockaddr{unsigned short sa_family; /* address type */char sa_data[14]; /* protocol address *