计算机网络实验2018socket编程七_第1页
计算机网络实验2018socket编程七_第2页
计算机网络实验2018socket编程七_第3页
计算机网络实验2018socket编程七_第4页
计算机网络实验2018socket编程七_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、华中科技大学电信学院2015 实验课程简介实验课程简介 l课程内容 l共四个实验,每个实验4个学时 lWindows Socket 编程 l分组观察与交换机 l路由协议分析 lTCP协议分析 l课程安排 l3、7、11、13周 9-12节课 南一楼东204 需签到 l独立完成实验报告,在实验隔周理论课堂上提交 2 实验一 Windows Socket 编程 华中科技大学电信学院2015 Windows Socket Windows Socket 编程编程 l实验目的 lSocket编程 l 常用API l实验软件 l实验内容 4 实验目的实验目的 l通过编程了解 Client/Server 结

2、构的网络通信模型 l掌握Socket机制的工作原理 l掌握基于 Client/Server 结构的 Windows Socket TCP/UDP程序设计方法 5 Client-Server Client-Server 结构结构 l在TCP/IP网络环境下,不同主机上的两个应用程 序通信普遍采用客户端-服务器模型 (client-server architecture, C/S) lClient在需要服务时向server提出申请 lServer等待client提出请求并予以响应 lServer始终运行,监听网络接口 l收到client请求启动服务进程响应客户, 同时继续监听服务窗口,保证后续的

3、client也能及时得到服务 6 背景知识背景知识Windows SocketWindows Socket是什么?是什么? lWindows Sockets是Microsoft Windows的网络程序设计接口 lSocket于1981年在BSD4.1 UNIX中 提出 l客户端/服务器模型 7 80年代初,美国国防部高级研究计划局 (ARPA)给UC Berkeley提供了资金,让他们 在UNIX操作系统下实现TCP/IP协议。在这 个项目中,研究人员为TCP/IP网络通信开 发了一个API(应用程序编程接口),这个API 称为Socket接口(套接字)。今天Socket接口 是TCP/IP

4、网络最为通用的API,也是在 Internet上进行应用开发最为通用的API。 90年代初,由Microsoft联合其他几家公 司共同制定了一套Windows下的网络编程 接口,即Windows Socket规范。它是 Berkeley Socket的重要扩充,主要是增加了 一些异步函数,并增加了符合Windows消 息驱动特性的网络事件异步选择机制。 WinSock规范是一套开放的、支持多种协议 的Windows下的网络编程接口。从1991年 的1.0版到1995年的2.0.8版,经过不断完善, 已成为Windows网络编程的事实上的标准。 一个本地的, 应用程序创建的, 操作系统控制的接口

5、。 通过该接口 应用进程可以 从另一个应用进程 发送或者接收消息 socket SocketSocket套接字套接字 l目标:学习如何建立客户端/服务器应用程序,使 用套接字进行通信 l套接字(socket): 应用进程之间的接口,实现端到 端的传输协议 8 Internet 由操作 系统控制 由应用 开发者 控制 传输层 应用层 物理层 数据链路层 网络层 进程 传输层 应用层 物理层 数据链路层 网络层 进程 套接字 Socket是应用层与TCP/IP协议栈通信的中间软件抽象层 WinSock DLLWinSock DLL lWinSock与操作系统的关系 9 应用程序 1应用程序 2 网

6、络编程接口 如 WinSock API 网络通信协议 如 TCP/IP协议 操作系统 如 Windows 物理通信介质 动态链接库 16位版:WINSOCK.DLL 32位版:WSOCK32.DLL TCPTCP套接字编程套接字编程 l服务器做好准备 l服务器进程必须首先运行 l服务器必须先创建socket等待 处理客户端的连接请求 l客户端与服务器的联系 l创建客户端本地的TCP socket l指明服务器进程的IP地址和 端口号 l当客户端创建socket后,客户 端的TCP socket与服务器TCP socket建立连接 10 l服务器收到客户端连接请 求后,创建新的socket用 来

7、与客户端通信 l允许服务器与多个客户端通 信 l源端口号用来识别客户端 TCPTCP协议提供了客户协议提供了客户 端和服务器之间可靠端和服务器之间可靠 的,按次序的字节流的,按次序的字节流 传输传输 TCPTCP套接字编程套接字编程 l如同中国移动的10086服务 l调用socket()建立一个套接口 (移动建立好一个电话 总机) lbind()将该接口和本地IP地址和Port绑定 (设定总机 号为10086) llisten()让套接口做好侦听准备 (随时准备接听电话) l客户在套接口建立起来之后,便可调用connect()连 接服务器指定的Port (用户可拨打10086要求服务) l服务

8、器调用accept()来接收客户的连接请求 (一旦有 电话就接起) l服务器收到请求后,建立新的socket来对此连接服 务,原来的socket回到监听等待状态 (总机接电话 后转某分机服务,本身继续等待新的电话) l连接建立后,send()和recv()来发送和接收数据 (客 户与客服对话) l数据传送结束,调用closesocket()关闭套接口 (结束 请挂机) 11 常用常用APIAPI lAPI (Application Programming Interface) 应用程序接口 lDLL装载 lWinSock服务由动态链接库WinSock DLL提供,它完成 WinSock的初始化

9、任务,协商WinSock的版本支持,并分 配必要的资源。在使用WinSock API之前,必须调用 WSAStartup函数对其进行初始化。 lint WSAStartup(WORD v, (LPWSADATA) int WSAreturn; struct hostent *hp; struct sockaddr_in sin; char *host; char bufMAX_LINE; int s; int len; 15 Socket编 程库文件 示例示例: C: C客户端客户端 (TCP) (TCP) if (argc=2) host = argv1; else fprintf(stde

10、rr, usage: simplex-talk hostn); exit(1); WSAreturn = WSAStartup(0 x101, if(WSAreturn) fprintf(stderr, simplex-talk: WSA error.n); exit(1); /* translate host name into peers IP address */ hp = gethostbyname(host); if (!hp) fprintf(stderr, simplex-talk: unknown host: %sn, host); exit(1); /* build addr

11、ess data structure */ memset(char *) memcpy(char *) sin.sin_family = AF_INET; sin.sin_port = htons(SERVER_PORT); 16 将远程主机的名称 转换成IP地址 参数初始化 程序参数 处理 WinSock的初始化 示例示例: C: C客户端客户端 (TCP) (TCP) /* active open */ if (s = socket(PF_INET, SOCK_STREAM, 0) 0) perror(simplex-talk: socket); exit(1); if (connect(

12、s, (struct sockaddr *) close(s); exit(1); fprintf(stderr, client is connecting to %sn, host); /* main loop: get and send lines of text */ while (fgets(buf, sizeof(buf), stdin) bufMAX_LINE-1 = 0; len = strlen(buf) + 1; send(s, buf, len, 0); WSACleanup(); return 1; 17 创建 客户端socket 从屏幕读取 字符串 连接服务器 示例示例

13、: C: C服务器服务器(TCP)(TCP) #include #include #include #include #define SERVER_PORT 5432 #define MAX_PENDING 5 #define MAX_LINE 256 int main() WSADATA WSAData; int WSAreturn; /* server address */ struct sockaddr_in sin; struct sockaddr_in remote; char bufMAX_LINE; int len; int s, new_s; WSAreturn = WSASt

14、artup(0 x101, if(WSAreturn) fprintf(stderr, simplex-talk: WSA error.n); exit(1); 18 Socket编 程库文件 WinSock的初始化 示例示例: C: C服务器服务器(TCP)(TCP) /* build address data structure */ memset(char *) sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(SERVER_PORT); /* setup passive op

15、en */ if (s = socket(PF_INET, SOCK_STREAM, 0) 0) perror(simplex-talk: socket failed.); exit(1); if (bind(s, (struct sockaddr *) exit(1); printf(server is ready in listening .n); listen(s, MAX_PENDING); /* wait for connection, then receive and print text */ while(1) len = sizeof(struct sockaddr_in); if (new_s = accept(s, (struct sockaddr *)&remote, &len) compilerlinker settings下导入相 应lib库 lCodeBlocksMinGWlib libwsock32.a libws2_32.a 26 实验内容实验内容 l运行simplex-talk例程,理解代码并观察现象 l修改simplex-talk,编制duplex-talk程序,支持 client和server的双向通信 l利用windows时间函数,编制简单的定时器, 模拟client和server之间的sto

温馨提示

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

评论

0/150

提交评论