欢迎来到天天文库
浏览记录
ID:39642836
大小:1.18 MB
页数:47页
时间:2019-07-08
《第10章 网络编程基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、现代网络技术第10章网络编程基础10.1socket编程10.2利用MySQLC接口实现多用户通信10.1socket编程10.1.1基本概念1.端口与插口端口用16bit的地址码——端口号进行标识。一个插口(socket),也称一个套接口,一个二元组(IP地址,端口号)。一条连接需要用一对插口标识。这对插口组成一个四元组:(本地IP地址,本地端口号,远程IP地址,远程端口号)现代网络技术10.1socket编程2.插口API为了简化网络应用程序的设计,为了使进程对通信信道的操作能够像对文件一样简单,伯克利的开发者们开发了一种称为插口(socket)的逻辑文件。当系统把一个socket分配给一
2、个进程时,就是将一个进程连接到了一个信道的端点上,就好像一个用户把一台电话机接到了电话线上,只要对方也把电话机接到电话线上,双方就可以进行连接、通话了。现代网络技术10.1socket编程Socket为整个网络通信提供协议基础。进程间的通信就通过连接两个进程的通路进行,软件设计人员不必考虑这个通路是什么,只要知道如何把一个进程连接到通路的端点即可;通路端点的分配由逻辑文件Socket进行,使得进程用文件描述符访问通路就像访问普通文件一样,大大简化了通信程序的设计。现代网络技术10.1socket编程10.1.2socket概述socket接口是TCP/IP网络的API,socket接口定义了许
3、多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。常用的socket类型有两种:流式socket(SOCK_STREAM)流式是一种面向连接的socket,针对于面向连接的TCP服务应用;数据报式socket(SOCK_DGRAM)是一种无连接的socket,对应于无连接的UDP服务应用。现代网络技术10.1socket编程10.1.3socket中的主要调用1.建立socket为了建立socket,程序可以调用socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:intsocket(intdomain,inttype,intprotocol);现代网
4、络技术10.1socket编程实际上“建立一个socket”意味着为一个socket数据结构分配存储空间。socket执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。socket数据结构中包含这五种信息。现代网络技术10.1socket编程2.socket配置面向连接的socket客户端通过调用connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。bind函数原型为:intbind(intsockfd
5、,structsockaddr*my_addr,intaddrlen);现代网络技术10.1socket编程structsockaddr结构类型是用来保存socket信息的:structsockaddr{unsignedshortsa_family;/*地址族,AF_xxx*/charsa_data[14];/*14字节的协议地址*/};现代网络技术10.1socket编程另外还有一种结构类型:structsockaddr_in{shortintsin_family;/*地址族*/unsignedshortintsin_port;/*端口号*/structin_addrsin_addr;/*I
6、P地址*/unsignedcharsin_zero[8];/*填充0以保持与structsockaddr同样大小*/};现代网络技术10.1socket编程使用bind函数时,可以用下面的赋值实现自动获得本机IP地址和随机获取一个没有被占用的端口号:my_addr.sin_port=0;/*系统随机选择一个未被使用的端口号*/my_addr.sin_addr.s_addr=INADDR_ANY;/*填入本机IP地址*/现代网络技术10.1socket编程计算机数据存储有两种字节优先顺序:高位字节优先低位字节优先。Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优
7、先方式存储数据的机器,在Internet上传输数据时就需要进行转换,否则就会出现数据不一致。现代网络技术10.1socket编程下面是几个字节顺序转换函数:(1)htonl():把32位值从主机字节序转换成网络字节序(2)htons():把16位值从主机字节序转换成网络字节序(3)ntohl():把32位值从网络字节序转换成主机字节序(4)ntohs():把16位值从网络字节序转换成主机字节序现代
此文档下载收益归作者所有