Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt

Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt

ID:59568015

大小:224.50 KB

页数:45页

时间:2020-11-11

Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第1页
Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第2页
Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第3页
Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第4页
Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第5页
Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第6页
Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第7页
Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第8页
Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第9页
Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt_第10页
资源描述:

《Linux程序设计__技术技巧与项目实践---网络编程--第9章说课讲解.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux程序设计__技术技巧与项目实践---网络编程--第9章9.2Socket的建立与配置为了建立socket,程序可以调用socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:intsocket(intdomain,inttype,intprotocol);domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM或SOCK_DGRAM,socket接口还定义了原始socket(SO

2、CK_RAW),允许程序使用底层协议;protocol通常赋值为0。socket()调用返回一个整型socket描述符,可在后面直接使用它。Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用socket函数时,socket执行体将“建立一个socket”,这意味着为一个socket数据结构分配存储空间。Socket执行体用来管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。7

3、/30/20212通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过调用connect()函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind()函数来配置本地信息。Bind函数将socket与本机上的一个端口相关联,随后就可以在该端口监听服务请求。Bind函数原型为:intbind(intsockfd,structsockaddr*my_

4、addr,intaddrlen);其中的sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为sizeof(structsockaddr)。structsockaddr结构类型是用来保存socket信息的:structsockaddr{unsignedshortsa_family;/*地址族,AF_xxx*/charsa_data[14];/*14个字节的协议地址*/};sa_family一般

5、为AF_INET,代表Internet(TCP/IP)地址族;sa_data则包含该socket的IP地址和端口号。7/30/20213另外还有一种结构类型:structsockaddr_in{shortintsin_family;/*地址族*/unsignedshortintsin_port;/*端口号*/structin_addrsin_addr;/*IP地址*/unsignedcharsin_zero[8];/*填充0保持与structsockaddr大小相同*/};这个结构更方便使用。sin_zer

6、o用来将sockaddr_in结构填充到与structsockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针或相反。使用bind函数时,可以用下面的赋值实现自动获得本机IP地址和随机获取一个没有被占用的端口号:my_addr.sin_port=0;/*系统随机选择

7、一个未被使用的端口号*/my_addr.sin_addr.s_addr=INADDR_ANY;/*填入本机IP地址*/7/30/20214通过将my_addr.sin_port置为0,函数会自动选择一个未占用的端口使用。同样,通过将my_addr.sin_addr.s_addr置为INADDR_ANY,系统会自动填入本机IP地址。注意使用bind函数需要将sin_port和sin_addr转换成为网络字节优先顺序;而sin_addr则不需要转换。实际上,计算机数据存储有两种字节优先顺序:高位字节优先和低位字

8、节优先。Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet上传输数据时就需要进行转换,否则就会出现数据不一致。下面是几个字节顺序转换函数:htonl():把32位值从主机字节序转换成网络字节序htons():把16位值从主机字节序转换成网络字节序ntohl():把32位值从网络字节序转换成主机字节序ntohs():把16位值从网络字节序转换成

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。