Unix环境下的Socket编程_第1页
Unix环境下的Socket编程_第2页
Unix环境下的Socket编程_第3页
Unix环境下的Socket编程_第4页
Unix环境下的Socket编程_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Unix环境下的套接口计程仪编程什么是套接口套接口接口是TCP/IP网络的API,套接口接口定义了许多函数或例程,程序设计师可以使用这些个来开发TCP/IP网络上的应用程序。 学习网际网络上的TCP/IP网络编程需要理解套接口界面。套接口接口设置修订者首先在Unix执行操作系统上放置接口。 了解Unix系统的投入产出后,套接口变得容易理解。 网络的套接口数据传输是特殊的I/O,套接口也是文件描述符。 套接口还具有类似于打开文件的函数调用套接口() 此函数返回整数的套接口描述符,然后通过套接口进行连接建立和数据传输等操作。 有两种常见的套接口类型:流式传输套接口(sock_stream )和数据

2、报套接口(sock_dgram )。 流式传输是面向连接的TCP服务应用的面向连接的套接口数据报套接口是未连接的UDP服务应用的未连接套接口。创建套接口为了创建套接口,计程仪程序可以调用套接字函数。 此函数返回语句的驾驶盘,如文件描述符。 套接口函数的手板模型如下入口套接字(入域、入口类型、入口协议);domain表示使用的连接协议族,通常以PF_INET表示因特网协议族(TCP/IP连接协议族)。 type残奥仪表指定套接口的类型。 SOCK_STREAM或SOCK_DGRAM,套接口接口还定义了原始套接口(sock_raw ),以便程序可以使用较低级的连接协议。 协议通常分配“0”。 So

3、cket ()调用返回整数套接口描述符,可用于以后的调用。套接口描述符是指向内部数据结构的指针,指向描述符表门户站。 调用套接字函数时,套接口斯坦共和国创建一个套接口。 实际上,“创建套接口”意味着为套接口数据结构分配存储空间。套接口执行体为你管理描述符表。两个网络计程仪报之间的网络连接包括五条信息:通讯协议、本地连接协议地址、本地男公关通讯端口、远程主机地址和远程连接协议通讯端口。 套接口数据结构包含五条这些个信息。套接口配置在套接口调用返回套接口描述符后,必须在使用套接口进行网络传输之前配置套接口。 面向连接的套接口客户端通过调用Connect函数将本地和远程信息存储在套接口数据结构中。

4、未连接到套接口的客户端和服务端以及连接到套接口的服务端通过调用bind函数来配置本地信息。Bind函数将套接口与本地计算机上的通讯端口相关联,以便该通讯端口可以接收服务风险伊斯特。 Bind函数的手板模型如下所示魔法系结(魔法系结、魔法系结* my _ addr、魔法系结);Sockfd是调用套接字函数返回的套接口描述符,my_addr是包含本地IP地址、通讯端口号等的消息信息的sockaddr型的指针addrlen多被设定为sizeof(struct sockaddr )。struct sockaddr结构类型用于保存套接口信息。强烈索克卡德。无符号短发sa _ family; 地址系列,A

5、F_xxx */卡尔萨达斯; /* 14字节的连接协议地址*/;sa_family通常是AF_INET,代表一个网际网络(tcp/ip )地址家族。 sa_data包含套接口的IP地址和通讯端口号。还有一个结构类型强烈声援_ in。短int sin _ family; 住址族。无符号短插入端口; /*通讯端口编号*/强度增加/减少。 /* IP地址*/无符号卡尔森_ zero 8; 填充0,使其与struct sockaddr大小相同*/;这个结构更好用。 sin_zero用于将sockaddr_in结构填充到与struct sockaddr相同的长度,并且可以使用bzero ()或memse

6、t ()函数将其设置为零。 指向sockaddr_in的指针和指向sockaddr的指针可以相互转换。 也就是说,如果函数所需的残奥元类型是sockaddr,则可以在调用函数时将指向sockaddr_in的指针转换为指向sockaddr的指针,反之亦然。要使用bind函数自动获取本地IP地址并随机获取未使用的通讯端口号,请使用以下赋值:my _ addr.sin _端口=0。 /*随机选择未使用的通讯端口编号*/我的天啊,我的天啊,我的天啊。 填写本地IP地址*/如果将my_addr.sin_port设置为0,函数将自动选择并使用未使用的通讯端口。 同样,通过将my_addr.sin_addr

7、.s_addr设置为INADDR_ANY,可以自动填充本地IP地址。注意如果使用绑定函数,则必须将sin_port和sin_addr转换为网络字节优先级。 sin_addr不需要转换。修正机数据存储有高位字节优先和低位字节优先两种字节优先。 由于网际网络上的数据以高位字节的优先顺序在网络上传输,因此在内部以低位字节的优先顺序存储数据的设备在通过网际网络传输数据时需要进行转换。 如果不这样做,就会发生数据不一致。下面是一些字节顺序转换函数htonl () :将32位色值从男公关字节顺序转换为网络字节顺序htons () :将16个二进制位值从男公关字节顺序转换为网络字节顺序ntohl () :将

8、32位色值从网络字节顺序转换为男公关字节顺序ntohs () :将16个二进制位值从网络字节顺序转换为男公关字节顺序Bind ()函数在成功调用时返回0,如果遇到错误则返回-1 ,并将errno设置为相应的错误号。 在调用bind函数时,通常不要将通讯端口号设置为小于1024的值。 因为11024是保留的通讯端口编号,所以可以选择大于1024的通讯端口编号。建立连接面向连接的客户端计程仪程序使用Connect函数来配置套接口,并与远程服务器建立TCP连接。 函数的手板模型如下接口连接(接口、接口连接* serv _ addr、接口连接);Sockfd是套接字函数返回的套接口描述符。 serv_

9、addr是包含远程男公关的IP地址和通讯端口号的指针。 addrlen是远端地质构造的长度。 Connect函数在发生错误时返回-1,并将errno设置为相应的错误查询密码。 您不需要调用bind ()来执行客户端预计程仪编程。 在这种情况下,您只需知道目标计算机的IP地址,而无需在意客户端通过哪个通讯端口连接到服务器Connect函数启动与远程男公关的直接连接。 仅当面向连接的客户端程序使用套接口时,此套接口才需要连接到远程男公关。 无连接连接协议不建立直接连接。 面向连接的服务也不启动连接。 这只是在连接协议通讯端口上被动接收客户的请求。Listen函数将套接口置于被动侦听模式,并创建传入

10、数据队列,该队列将传入的服务风险伊斯特存储在此队列中,直到plum处理完为止。收听(收音机、背包);Sockfd是从套接口系统调用返回的套接口描述符。 backlog指定在链接伊斯特队列中行政许可的链接伊斯特的最大数目,其中键入的连接链接伊斯特等待accept (),如下所示。 Backlog限制队列中等待服务的链路伊斯特数,并且大多数系统的默认奥尔特值为20。 服务风险伊斯特到达后,进入队列已满,套接口拒绝伊斯特连接,客户将收到错误信息。 如果发生错误,listen函数返回-1并设置相应的errno错误查询密码。accept ()函数允许服务器接收客户的连接请求。 输入队列创建后,服务将调用

11、accept函数,休眠并等待客户的连接请求。接受(接入、退出*增加、退出);sockfd是接收的套接口描述符,addr通常是指向sockaddr_in变量的指针,该变量存储提供连接请求服务的男公关的信息(男公关从通讯端口发出请求)。 addrten通常是一个整数指针变量,指向值sizeof(struct sockaddr_in )。 如果发生错误,accept函数返回-1,并对相应的errno值进行排序。首先,当accept函数监测的套接口接收到连接请求时,套接口执行实体建立新的套接口,执行实体将这个新套接口与请求连接处理的地址相关联,接收到服务请求的第一个套接口继续在在先的套接口上接收,并且

12、它能够在新的套接口描述符上接收数据。数据传输Send ()和recv ()两个函数用于在面向连接的套接口上传输数据。Send ()函数的手板模型如下英特森德、康斯特博id * msg、英特兰、英特兰;Sockfd是用于传输数据的套接口描述符msg是指向要发送的数据的指针Len是数据的长度(以字节为单位) flags通常设置为0 (有关使用此残奥仪表的信息,请参见man文档)。Send ()函数返回实际发送的字节数。 可能比发送的数据少。 计程仪程序需要将send ()返还值与发送的字节数进行比较。 如果send ()的返还值与len不匹配,则必须处理此情况。char *msg=Hello! ;

13、英格兰、比特_森;雷恩=斯特朗(msg );分类=发送(索克夫d、毫秒、长度、长度、0 );recv ()函数的手板模型如下英特尔接口、博伊d *博夫、英特尔、统一标志;Sockfd是接收数据的套接口描述符buf是存储接收数据的缓冲区len是缓冲区的长度。 Flags也设定为0。Recv ()返回实际接收的字节数,如果发生错误,则返回-1并排列对应的errno值。Sendto ()和recvfrom ()用于以未连接的数据报套接口方式传输数据。 本地套接口未与远程计算机建立连接,因此在发送数据时必须指定目标地址。sendto ()函数的原型如下:发送到(接入软盘、接入卷msg、接入len、无接

14、入标志、接入基础架构软件*到、接入工具)。此函数比send ()函数多两个,to代表目的地的IP地址和通讯端口号码信息,其中tolen通常被赋予sizeof (结构套接字addr )。 Sendto函数返回实际发送的数据字节的长度,或者如果发生发送错误,则返回-1。Recvfrom ()函数的手板模型如下英特尔软件、void *buf、英特尔len、统一标志、基础软件* from、英特尔框架from是struct sockaddr类型的变量,用于保存源计算机的IP地址和通讯端口号。 fromlen始终设置为sizeof (结构套接字)。 如果返回recvfrom (),则fromlen包含实际

15、存储在from中的数据字节数。Recvfrom ()函数返回接收的字节数,如果出错则返回-1,并设置相应的errno。对数据报套接口调用connect ()函数时,也可以使用send ()和recv ()进行数据传输,但套接口保持数据报套接口,利用变压器通讯端口层的UDP服务。 但是,在发送和接收数据时,内核会自动添加目标和源地址信息。结束转送完成所有数据操作后,可以调用close ()函数释放套接口以停止套接口上的所有数据操作关闭(索克夫d );也可以调用shutdown ()函数来关闭套接口。 使用此函数,可以仅停止一个方向上的数据传输,而继续一个方向上的数据传输。 可以关闭套接口的写入,继续在套接口中接受数据,直到所有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论