欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

《精通UNIX下C语言编程及项目实践》学习笔记05 网络通信篇

《精通UNIX下C语言编程及项目实践》学习笔记05 网络通信篇

欢迎转载,请保留作者信息
bill@华中科技大学
http://billstone.cublog.cn 
第五篇 网络通信篇
  IPC对象只能实现在一台主机中的进程相互通信, 网罗通信对象则打破了这个限制, 它如同电话和邮件, 可以帮助不通屋檐下的人们相互交流.
  套接字(Socket)是网络通信的一种机制, 它已经被广泛认可并成为事实上的工业标准.
第十五章 基于TCP的通信程序
  TCP是一种面向连接的网络传输控制协议. 它每发送一个数据, 都要对方确认, 如果没有接收到对方的确认, 就将自动重新发送数据, 直到多次重发失败后,才放弃发送.
  套接字的完整协议地址信息包括协议, 本地地址, 本地端口, 远程地址和远程端口等内容, 不同的协议采用不同的结构存储套接字的协议地址信息.
  Socket是进程间的一个连接, 我们可以采用协议, 地址和端口的形式描述它:
  { 协议, 本地地址, 本地端口, 远程地址, 远程端口 }
  当前有三种常见的套接字类型, 分别是流套接字(SOCK_STREAM), 数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW):
  1) 流套接字. 提供双向的, 可靠的, 顺序的, 不重复的, 面向连接的通信数据流. 它使用了TCP协议保真了数据传输的正确性.
  2) 数据报套接字. 提供一种独立的, 无序的, 不保证可靠的无连接服务. 它使用了UDP协议, 该协议不维护一个连接, 它只把数据打成一个包, 再把远程的IP贴上去, 然后就把这个包发送出去.
  3) 原始套接字. 主要应用于底层协议的开发, 进行底层的操作.
  TCP协议的基础编程模型
  TCP是面向连接的通信协议, 采用客户机-服务器模式, 套接字的全部工作流程如下:
  首先, 服务器端启动进程, 调用socket创建一个基于TCP协议的流套接字描述符.
  其次, 服务进程调用bind命名套接字, 将套接字描述符绑定到本地地址和本地端口上, 至此socket的半相关描述----{协议, 本地地址, 本地端口}----完成.
  再次, 服务器端调用listen, 开始侦听客户端的socket连接请求.
  接下来, 客户端创建套接字描述符, 并且调用connect向服务器提交连接请求. 服务器端接收到客户端连接请求后, 调用accept接受, 并创建一个新的套接字描述符与客户端建立连接, 然后原套接字描述符继续侦听客户端的连接请求.
  客户端与服务器端的新套接字进行数据传送, 调用write或send向对方发送数据, 调用read或recv接收数据.
  在数据交流完毕后, 双方调用close或shutdown关闭套接字.
  (1) Socket的创建
  在UNIX中使用函数socket创建套接字描述符, 原型如下:

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功