文档介绍:河南师范大学计算机与信息技术学院计算机与信息技术学院综合性、设计性实验报告专业:计算机科学与技术班级:10级计科 2班2012 —2013 学年第一学期课程名称 Linux C程序设计基础指导教师毛文涛学号姓名 1011114124 刘的实验地点过街楼 C区实验时间 2012 . 8:00-10:00 项目名称 Linux 网络编程实验实验类型综合性一、实验目的(1)理解 socket 工作原理; (2)理解多路复用服务器开发模式; (3)理解网络程序工作原理二、总体设计(设计原理、设计方案及流程等) oket 是独立于具体协议的网络编程接口,在 ISo 模型中位于会话层和传输层之间,包括流式套接字、数据报套接字、原始套接字。流式套接字(SOCK_STREAM) : 提供了一个面向连接、可靠的数据传输服务, 数据无差错、无重复的发送且按发送顺序接收。数据报套接字(SOCK_DGRAM) : 提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。原始套接字(SOCK_RAM) :可以对较低层协议。 S oket 的位置如图: —服务器模式。应用层程序 IP 数据链路层与物理层 TCP UDP 流套接字接口数据报套接字接口河南师范大学计算机与信息技术学院面向连接的 C/S 程序工作流程(TCP) : 服务器端工作流程: ?使用 WSAStartup() 函数检查系统协议栈安装情况?使用 socket() 函数创建服务器端通信套接口?使用 bind() 函数将创建的套接口与服务器地址绑定?使用 listen() 函数使服务器套接口做好接收连接请求准备?使用 accept() 接收来自客户端由 connect() 函数发出的连接请求?根据连接请求建立连接后,使用 send() 函数发送数据,或者使用 recv() 函数接收数据?使用 closesocket() 函数关闭套接口(可以先用 shutdown() 函数先关闭读写通道) 客户端程序工作流程: ?使用 WSAStartup() 函数检查系统协议栈安装情况?使用 socket() 函数创建客户端套接口?使用 connect() 函数发出也服务器建立连接的请求(调用前可以不用 bind() 端口号,由系统自动完成) ?连接建立后使用 send() 函数发送数据,或使用 recv() 函数接收数据?使用 closesocet() 函数关闭套接口?最后调用 WSACleanup() 函数,结束 Winsock Sockets API :套接字进行 I/O 操作时, 函数要等待到相关的操作完成以后才能返回,对提高处理机的利用率不利,但编程简单。非阻塞方式:套接字进行 I/O 操作时,无论操作成功与否,调用都会立即返回。阻塞方式编程简单,一个套接口的默认操作模式为阻塞,可以调用函数 ioctlsocket() 进行设置。 : socket 创建套接字;bind 绑定本机端口;connect 建立连接;listen 监听端口;accept 接受连接;recv, recvfrom 数据接收;send, sendto 数据发送 c;lose, shutdown 关闭套接字三、实验步骤