linux_C语言实现网络通信简介.ppt_第1页
linux_C语言实现网络通信简介.ppt_第2页
linux_C语言实现网络通信简介.ppt_第3页
linux_C语言实现网络通信简介.ppt_第4页
linux_C语言实现网络通信简介.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

LinuxC语言实现网络通信简介 主要内容 TCP IP协议概述Socket基础编程域套接字 一 TCP IP协议概述 OSI参考模型及TCP IP参考模型 负责应用程序的网络访问 通过端口号来识别各个不同的进程 负责端对端之间的通信会话连接与建立 传输协议的选择根据数据传输方式而定 负责将数据帧封装成IP数据包 并运行必要的路由算法 负责将二进制流转换为数据帧 并进行数据帧的发送和接收 数据帧是独立的网络信息传输单元 TCP TCP TransmissionControlProtocol 传输控制协议 为应用程序提供可靠的通信连接 实现了从一个应用程序到另一个应用程序的数据传递 适合于一次传输大批数据的情况 并适用于要求得到响应的应用程序 建立一次TCP连接需三次握手 基本过程是服务器先建立一个套接口并等待客户端的连接请求 然后顺序进行三次握手 第一次握手 当客户端调用connect进行主动连接请求时 客户端TCP发送一个SYN 告诉服务器客户端将在连接中发送的数据的初始序列号 第二次握手 当服务器收到这个SYN后也给客户端发一个SYN 里面包含了服务器将在同一连接中发送的数据的初始序列号 第三次握手 最后客户再回送一个带有确认顺序号和确认号的数据段来确认服务器发的SYN 到此为止 一个TCP连接被建立 TCP三次握手 TCP数据报头 UDP UDP UserDatagramProtocol 用户数据报协议 是一种无连接协议 不需要像TCP那样通过三次握手来建立一个连接 且不对传送包进行可靠的保障 适合于一次传输少量数据 其可靠性由应用层来负责 同时 一个UDP应用可同时作为应用的客户方或服务器方 UDP比TCP能更好地解决实时性的问题 包括网络视频会议系统在内的众多的客户 服务器模式的网络应用都使用UDP协议 UDP数据报头 二 Socket基础编程 socket概述 socket概念 在Linux中的网络编程是通过socket接口来进行的 socket是一种特殊的I O接口 它也是一种文件描述符 是一种常用的进程之间通信机制 通过它不仅能实现本地机器上的进程之间的通信 而且能够实现不同机器上的进程之间的通信 socket类型 1 流式socket SOCK STREAM 使用TCP协议 2 数据报socket SOCK STREAM 使用数据报协议UDP 3 原始socket 主要用于一些协议的开发流式socket和数据报socket的区别 前者在通信之前必须先建立连接 并且只能和一方通信 而后者在通信之前不用先建立连接 并且可以和多方通信 socket bind recv read close close recv read connect socket send write send write 传输数据 传输数据 accept listen bind 等待客户连接请求的到来 三次握手过程建立TCP连接 服务器端 客户端 TCP协议socket编程的流程图 socket recvfrom sendto bind close close recv connect socket send send sendto recv recvfrom 在connect之后也可以用read和write 或 或 传输数据 传输数据 UDP协议socet编程的流程图 进行socket编程的基本函数 socket 用于建立一个socket连接 可以指定socket类型等信息 在建立了socket连接之后 可对socketaddr或socketaddr in进行初始化 以保存所建立的socket信息 bind 用于将本地IP地址绑定到端口号 主要用于TCP的连接 在UDP的连接中不用 listen 用于创建一个等待队列 在其中存放未处理的客户端连接 connect 在TCP中用于与服务器端建立连接 而在UDP中connect 的作用是限定该套接字只能和指定的一方通信 即未使用connect之前 可以和任意的地址通信 而connect之后只能和一方通信 在TCP中一个socket只能connect一次 而在UDP中一个socket可以connect多次 accept 用于等待并接收客户端的连接请求 它通常从等待队列中取出第一个未处理的连接请求 send 和recv 分别用于发送和接收数据 可以用在TCP中 也可以用在UDP中 sendto 和recvfrom 作用与send 和recv 类似 当用在TCP时 后面的几个与地址有关参数不起作用 作用等同于send 和recv 当用在UDP时 可以用在之前没有使用connect 的情况下 这两个函数可以自动寻找指定地址并进行连接 Socket地址数据结构 structsockaddr unsignedshortsa family 协议族 charsa data 14 协议地址 包含该socket的IP地址和端口号 structsockaddr in shortintsa family 协议族 unsignedshortintsin port 端口号 structin addrsin addr IP地址 unsignedcharsin zero 8 填充0以保持与structsockaddr同样大小 socket 函数 建立一个socket连接 bind 函数 将本地IP地址绑定到端口号 TCP listen 函数 创建一个等待队列 connect 函数 与服务器端建立连接 TCP 或限定该套接字只能和指定的一方通信 UDP accept 函数 等待并接收客户端的连接请求 send 函数 发送数据 recv 函数 接收数据 sendto 函数 recvfrom 函数 三 域套接字 管道由于只能实现具有亲缘进程的进程间通信 使用受到了很大的限制 有名管道解决了这一问题 但是 无论是管道还是有名管道 都只能实现单向通信 在只创建一个管道的情况下 用套接字除了可以实现网络间不同主机间的通信外 还可以实现同一主机的不同进程间的通信 且建立的通信是双向的通信 这里所指的使用套接字实现进程间通信 是由将通信域指定为PF UNIX来实现的 即Unix域套接字 Unix域套接字是通过套接字API实现的简单的协议族 实际上它并不代表一个网络协议 它只能连接到同一台机器上的套接字 它提供了灵活的IPC机制 它的地址是它所在的文件系统的路径名 创建之后套接字就和路径名绑定在一起 用来表示Unix域地址的套接字文件能够使用stat 但是不能通过open 打开 而且应该使用套接字API对它进行操作 Unix域套接字是面向连接的 每个套接字的连接都建立了一个新的通讯信道 服务器可能同时处理许多连接 但对于每个连接都有不同的文件描述符 这个属性使Unix域套接字能够比命名管道更好的适应IPC任务 域套接字的函数的形式intsocket intdomain inttype intprotocol socket函数中的domain参数用于指定通信域 domain参

温馨提示

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

最新文档

评论

0/150

提交评论