实验:SOCKET通信课件

上传人:我*** 文档编号:145764028 上传时间:2020-09-23 格式:PPT 页数:38 大小:147.50KB
返回 下载 相关 举报
实验:SOCKET通信课件_第1页
第1页 / 共38页
实验:SOCKET通信课件_第2页
第2页 / 共38页
实验:SOCKET通信课件_第3页
第3页 / 共38页
实验:SOCKET通信课件_第4页
第4页 / 共38页
实验:SOCKET通信课件_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《实验:SOCKET通信课件》由会员分享,可在线阅读,更多相关《实验:SOCKET通信课件(38页珍藏版)》请在金锄头文库上搜索。

1、1,实验目的 掌握网络通信编程的一种手段 进一步学习C语言编程,网络通信实验,2,SOCKET,Socket简介 Socket编程 Windows Socket简介,3,SOCKET简介,Client/Server工作模式 什么是SOCKET SOCKET类型 工作流程 常用函数,4,C/S工作模式,特点: 将应用分成两部分 服务端负责数据处理和查询 客户端负责结果表示GUI 减轻网络负载,查询 商业逻辑在Client,瓶颈,5,B/S工作模式,特点: 改进信息表示方式 三层构架,将商业逻辑放到Server 减轻安装维护工作,6,网络进程通信机制,单机系统中的进程通信机制(IPC)不能满足网络

2、进程通信的要求; 网络进程通信中的进程标识需要主机地址的参与; 网络进程通信要求能够识别多重协议。 C/S模型 并发服务器 重复服务器,7,网络通信进程的标识,全网唯一地标识一个进程三元组 ( protocol, local_addr, local_port ) 半相关(half-association) 完整的网络进程通信标识五元组 ( protocol, local_addr, local_port, remote_addr, remote_port ) 相关(association),8,什么是SOCKET?,是TCP/IP传输层的接口 是BSD UNIX提供的网络应用编程接口 采用客户

3、机/服务器的通信机制,使网络客户机方和服务器方通过Socket实现网络之间的连接和数据交换 提供了一系列的系统调用,使用这些系统调用可以实现TCP,UDP,ICMP和IP等多种网络协议之间的通信 典型的Client/Server模式的应用,9,SOCKET类型,流式套接口:定义了一种可靠的面向连接的服务,实现了无差错无重复的顺序数据传输 数据报套接口:定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错. 原始套接口:对低层协议如IP或ICMP直接访问,主要用于新的网络协议实现的测试等,10,SOCKET服务,面向连接 无连接,11,无连接工作流程,12,面

4、向连接的工作流程,13,SOCKET基本函数,创建SOCKET( C/S ) 绑定SOCKET( C/S ) 连接(C) 设置请求队列(S) 从队列取一个请求(S) 发送数据( C/S ) 接收数据( C/S ) 关闭SOCKET( C/S ),14,SOCKET基本函数(1),名称:SOCKET 功能:创建一个SOCKET标识 格式:socket( int family,int type,int protocol); 入口:family 可以选 AF_UNIX:UNIX 互连网协议; AF_INET:Internet 协议(常用); AF_NS : Xerox NS 协议; type可选:

5、sock_STREAM:流socket sock_DGRAM:数据报socket sock_RAW:原始socket protocol,一般为0 出口:0 socket标识符,15,STEP 1:通过编辑创建一个test.c文件 #include #include main( ) int sd sd = socket( AF_INET,SOCK_STREAM ,0); printf( “ sd = %s n”, sd ); STEP 2:通过编译并生成可执行文件 STEP 3:执行test文件,查看运行结果,举例:,16,SOCKET基本函数(2),名称:BIND 功能:将本地的socket地

6、址赋予创建的标识(命名) 格式:bind(int sockfd, struct sockaddr *myaddr, int addrlen) 入口: sockfd::已经创建的 socket标识符; myaddr:本地地址,指明本机的地址和本地端口号 addrlen:地址长度 出口:0 成功 #include,17,通用socket地址结构定义,struct sockaddr u_char sa_len; /*地址总长度*/ u_char sa_family; /*AF_INET:TCP/IP地址*/ char sa_data14; /*address*/ ,18,TCP/IP的socket地

7、址结构定义,struct sockaddr_in u_char sin_len; /*地址总长度*/ u_char sin_family; u_short sin_port; /*协议端口号*/ struct in_addr sin_addr; /* IP addr*/ char sin_zero8; /*un_used*/ struct in_addr u_long s_addr; ,19,SOCKET基本函数(3),名称:CONNECT 功能:与服务器建立连接 格式:connect(int sockfd, struct sockaddr *servaddr, int addrlen); 入

8、口: sockfd::已经绑定的 socket标识符; servaddr:服务方地址,指明服务方的地址和服务端口号 addrlen:地址长度 出口:0 成功 #include 备注:仅适用于Client,20,SOCKET基本函数(4),名称:LISTEN 功能:服务器设置请求队列数 格式:listen( sockfd, max_numb ); 入口: sockfd::已经绑定的 socket标识符; max_numb:能同时处理的请求数 出口:0 成功 #include 备注:仅适用于 Server,21,SOCKET基本函数(5),名称:ACCEPT 功能:服务器从队列中取出一个请求进行处

9、理 格式:new_sd = accept( sockfd ); 入口:sockfd:: socket标识符; 出口:0 新的socket标识符 #include 备注:仅适用于 Server,以后客户方与服务方的通信均使用新的socket标识符,原标识符继续监听客户请求,22,SOCKET基本函数(6),名称:SEND/RECV 功能:进行数据的发送和接收 格式: send(int sockfd, char *buff, int nbytes, int flag); recv(int sockfd, char *buff, int nbytes, int flags); 入口: sockfd:

10、: socket标识符; buff:发送的内容或者接收缓冲区 nbytes:发送或者接收缓冲区的长度 flag:数据类型,缺省为0 MSG_OOB:发送或接收加急数据; MSG_PEEK:观察输入报文; MSG_DONTROUTE:旁路路由选择; 出口:0 实际发送或接收的字符数,23,SOCKET基本函数(7),名称:CLOSE 功能:关闭Socket 格式:close( sockfd ); 入口: sockfd:: 欲关闭的socket标识符; 出口:0 成功 #include,24,Windows Socket,Windows Socket机制 对基本socket的扩展 常用的函数 网络

11、 数据库,25,Windows Socket机制,26,对基本SOCKET的扩展,异步选择机制WSAAsyncSelect() 允许应用程序提名一个或多个感兴趣的网络事件,如FD_READ,FD_WRITE,FD_CONNECT,FD_ACCEPT等等代表的网络事件.当被提名的网络事件发生时,Windows应用程序的窗口函数将收到一个消息. 实现事件驱动. 异步请求函数 允许应用程序用异步方式获得请求的信息,如WSAAsyncGetXByY()类函数. 这些函数是对BSD标准函数的扩充.函数WSACancelAsyncRequest()允许用户中止一个正在执行的异步请求. 阻塞处理方法 WSA

12、SetBlockingHook() WSAUnhookBlockingHook()让应用程序设置或取消自己的钩子函数.函数WSAIsBlocking()可以检测是否阻塞,函数WSACancelBlockingCall()可以取消一个阻塞的调用. 错误处理 WSAGetLastError()和WSASetLastError()获取和设置最近错误号. 启动和终止 WSAStartup()、WSACleanup()申请和终止对Windows Sockets DLL的使用,27,WinSocket扩展函数,启动与终止 出错处理 异步选择机制与异步请求例程,28,常用消息,29,基本函数综合举例 服务方

13、,1)创建socket 2)绑定 3)设置监听队列 4)监听 5)接收一包数据,并显示 6)关闭socket,30,基本函数综合举例 客户方,1)创建socket 2)绑定 3)与服务方连接 4)发送一串信息Hello,World! 5)关闭socket,31,例:client端,#ifndef unix #define WIN32 #include #include #else #define closesocket close #include #include #include #include #include #endif,#include #include #define PROT

14、OPORT 5193 /* default protocol port number */ extern int errno; char localhost = localhost; /* default host name */,32,main(argc, argv) int argc; char *argv; struct hostent *ptrh; /* pointer to a host table entry */ struct protoent *ptrp; /* pointer to a protocol table entry */ struct sockaddr_in sa

15、d; /* structure to hold an IP address */ int sd; /* socket descriptor */ int port; /* protocol port number */ char *host; /* pointer to host name */ int n; /* number of characters read */ char buf1000; /* buffer for data from the server */ #ifdef WIN32 WSADATA wsaData; WSAStartup(0 x0101, #endif,33,

16、memset(char *) ,34,/* Connect the socket to the specified server. */ if (connect(sd, (struct sockaddr *) /* Terminate the client program gracefully. */ ,35,例:server端,#ifndef unix #define WIN32 #include #include #else #define closesocket close #include #include #include #include #include #endif,#include #include #define PROTOPORT 5193 /* default protocol port number */ #define QLEN 6 /* 队列长 */ int visits = 0; /* 客户连接数 */,36,main(argc, argv) int argc; char *argv; struct hostent *ptr

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号