欢迎来到天天文库
浏览记录
ID:41036976
大小:37.00 KB
页数:5页
时间:2019-08-14
《01_socket编程的基础和基本过程-VC》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Socket编程的基础和基本过程一、什么是socket接触网络编程当然要了解socket,socket就是套接字,它的定义是一种软件抽象,用于表达两台机器之间的连接‘终端’。对于一个给定的连接,每台机器上都有一个套接字。有点像我们打电话,用电缆把电话连接起来,中间的物理结构和具体实现过程我们不必了解,只要我们能进行通话即可。当我们进行编程时,需要用到socket接口,socket接口定义了许多函数或例程,我们可以直接调用它们实现网络连接、通信等功能。socket接口为我们建立通信信道,我们可以通过这条通道来与一台或多台计算机进行连接。二、sock
2、et编程的基本过程,下面我们介绍的都是以基本的WindowssocketAPI为例:1.建立socket:socket编程,其最基本的步骤就是建立socket,下面来看看建立socket的函数原型:SOCKETsocket(intaf,inttype,intprotocol);第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置PF_INET;第二个参数指定要创建的套接字类型,一般分为流套接字和数据报套接字两种类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM;第三个参数指定应用程序所使用
3、的通信协议。该函数如果调用成功就返回新创建的套接字的描述符,如果失败则返回INVALID_SOCKET。套接字描述符是一个整数类型的值。每个进程的进程空间里都有一个套接字描述符表,该表中存放着套接字描述符和套接字数据结构的对应关系。该表中有一个字段存放新创建的套接字的描述符,另一个字段存放套接字数据结构的地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个套接字描述符表但是套接字数据结构都是在操作系统的内核缓冲里。2.socket的配置:通过socket函数调用返回一个socket描述符后,在使用sock
4、et进行网络传输以前,必须配置该socket。面向客户端的socket通过调用connect函数在socket数据结构中保存本地和远端信息。无连接客户端、服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。bind函数将socket与本机上的一个端口相关联,随后你就可以在该端口监听服务请求。下面看看connect函数和bind函数:intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);当创建了一个socket以后,套接字数据结构中有一个默认的IP地址和默认的端口号。一
5、个服务程序必须调用bind函数来给其绑定一个IP地址和一个特定的端口号。客户程序一般不必调用bind函数来为其socket绑定IP地址和断口号。该函数的第一个参数指定待绑定的socket描述符;第二个参数指定一个sockaddr结构,该结构是这样定义的:structsockaddr{unsignedshortsa_family;charsa_data[14];};sa_family指定地址族,对于TCP/IP协议族的套接字,给其置AF_INET。当对TCP/IP协议族的套接字进行绑定时,我们通常使用另一个地址结构:structsockaddr_i
6、n{shortsin_family;unsignedshortsin_port;structin_addrsin_addr;charsin_zero[8];};其中sin_family置AF_INET;sin_port指明端口号;sin_addr结构体中只有一个唯一的字段s_addr,表示IP地址,该字段是一个整数,一般用函数inet_addr把字符串形式的IP地址转换成unsignedlong型的整数值后再置给s_addr。有的服务器是多宿主机,至少有两个网卡,那么运行在这样的服务器上的服务程序在为其socket绑定IP地址时可以把htonl(
7、INADDR_ANY)置给s_addr,这样做的好处是不论哪个网段上的客户程序都能与该服务程序通信;如果只给运行在多宿主机上的服务程序的socket绑定一个固定的IP地址,那么就只有与该IP地址处于同一个网段上的客户程序才能与该服务程序通信。我们用0来填充sin_zero数组,目的是让sockaddr_in结构的大小与sockaddr结构的大小一致。3.实现功能①服务器端:需要对绑定的端口进行监听,函数原型如下:intlisten(SOCKETs,intbacklog);服务程序可以调用listen函数使其流套接字s处于监听状态。Backlog为
8、客户连接请求队列的最大数量。处于监听状态的流套接字s将维护一个客户连接请求队列。执行成功,则返回0;如果执行失败,则返回SOCKET_E
此文档下载收益归作者所有