《(39)--8.4 网络应用编程接口.ppt》由会员分享,可在线阅读,更多相关《(39)--8.4 网络应用编程接口.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网络应用编程接口1.TCP套接字编程 2.一个简单的代码实例1多个应用进程使用系统调用的机制 应用程序 1应用程序 2应用程序 n由应用程序调用的系统函数用户地址空间中的应用程序系统调用接口系统地址空间中的协议软件包括 TCP/IP 协议软件的操作系统内核2应用编程接口 API(Application Programming Interface)n应用程序要想执行网络操作必须通过操作系统为应用程序操作网络所提供的接口,这个接口通常称为网络应用编程接口API(Application Programming Interface)。n最著名的是最初由加州大学伯克利分校的UNIX小组开发的套接字(so
2、cket)API,现在几乎所有流行的操作系统都支持它。在此基础上,微软联合其它公司制定了Windows下的网络应用编程接口,即Windows Socket规范。3几种应用编程接口 API nBerkeley UNIX 操作系统定义了一种 API,它又称为套接字接口(socket interface)。n微软公司在其操作系统中采用了套接字接口 API,形成了一个稍有不同的 API,并称之为 Windows Socket。nAT&T 为其 UNIX 系统 V 定义了一种 API,简写为 TLI(Transport Layer Interface)。4应用进程通过套接字接入到网络 应用进程TCP由应
3、用程序控制因特网由操作系统控制客户服务器套接字TCP应用进程套接字套接字的作用 5套接字的作用 n当应用进程需要使用网络进行通信时就发出系统调用,请求操作系统为其创建“套接字”,以便把网络通信所需要的系统资源分配给该应用进程。n操作系统为这些资源的总和用一个叫做套接字描述符的号码来表示,并把此号码返回给应用进程。应用进程所进行的网络操作都必须使用这个号码。n通信完毕后,应用进程通过一个关闭套接字的系统调用通知操作系统回收与该“号码”相关的所有资源。6套接字描述符表(每一个进程一个描述符)0:1:2:3:4:操作系统套接字的数据结构协议族:PF_INET服务:SOCK_STREAM本地 IP 地
4、址:远地 IP 地址:本地端口:远地端口:调用 socket 创建套接字 7closeclose服务器端socketbindlistenacceptrecvsend客户端socketrecvsendconnect连接建立请求数据数据1.TCP套接字编程8客户机套接字、监听套接字和连接套接字92.一个简单的代码实例n一个非常简单的TCP应用的代码实例:“Hello World!”n使用的是Windows操作系统的套接字API:Windows Socket 2.03#include 4#include 5#pragma comment(lib,ws2_32.lib)10服务器代码实例7int ma
5、in()89 WSADATA wsaData;10 WSAStartup(0 x202,&wsaData);/加载WinSock动态链接库11 /创建监听套接字12 SOCKET s;13 s=socket(AF_INET,SOCK_STREAM,0);14 /设置服务器端地址15 struct sockaddr_in serveraddr;16 memset(void*)&serveraddr,0,sizeof(serveraddr);17 serveraddr.sin_family=AF_INET;18serveraddr.sin_addr.s_addr=htonl(INADDR_ANY)
6、;19 /选择服务器的任一IP地址19 serveraddr.sin_port=htons(8888);20 /将服务器端地址与监听套接字绑定11服务器代码实例21 bind(s,(struct sockaddr*)&serveraddr,sizeof(serveraddr);22 listen(s,10);23 /接受连接请求并获得连接套接字24 SOCKET ss;25 ss=accept(s,NULL,NULL);26 closesocket(s);/关闭监听套接字27 /显示接收的字符串28 char buf13;29 recv(ss,buf,13,0);30 printf(%sn,b
7、uf);31 /关闭连接套接字32 closesocket(ss);33 WSACleanup();/注销并释放所有套接字资源34 return 0;3512客户端代码实例7int main()89 WSADATA wsaData;10 WSAStartup(0 x202,&wsaData);/加载WinSock动态链接库11 /创建客户端套接字12 SOCKET s;13 s=socket(AF_INET,SOCK_STREAM,0);14 /设置服务器端地址15 struct sockaddr_in serveraddr;16 memset(void*)&serveraddr,0,size
8、of(serveraddr);17 serveraddr.sin_family=AF_INET;18 serveraddr.sin_addr.s_addr=inet_addr(127.0.0.1);/环回测试地址19 serveraddr.sin_port=htons(8888);13客户端代码实例20 /连接服务器21 connect(s,(struct sockaddr*)&serveraddr,sizeof(serveraddr);22 /发送字符串23 send(s,Hello World!,13,0);24 /关闭客户端套接字25 closesocket(ss);26 WSACleanup();/注销并释放所有套接字资源27 return 0;2814