Socket编程原理

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。Socket编程原理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、TCP套接字编程

  • 服务器进程必须先处于运行状态
    • 创建一个监听socket(或欢迎socket)
    • 和本地端口绑定(指定监听socket的监听端口)
    • 监听socket阻塞等待接收客户端的连接

    监听socket只有服务器IP地址和程序端口号,格式如下:

    socket | ip:port|

  • 创建客户端本地套接字(隐式绑定到本地Port)

    客户端绑定的Port由传输层自行分配

    • 指定服务器进程的IP地址和port端口号
  • 当有客户端连接请求到来
    • 服务器的监听socket接收到来自客户端的请求,返回一个连接socket(与监听socket不同),与客户端端通信

      Connection Socket信息(维护服务器和客户端IP和Port四元组信息):

      socket | server ip:port | client ip:port|

    • 允许服务器与多个客户端通信
    • 使用客户端源IP和源端口来区分不同客户端的连接Socket
  1. 客户端调用传输层的连接API调用生效后,客户端建立了与服务器的TCP连接,可以进行通信
  • 数据结构
    • sockaddr_in

      IP地址和Port绑定关系的数据结构

      struct sockaddr_in {
      
      short sin_family; ——协议族IPV4/IPV6
      
      u_short sin_port; ——端口
      
      struct in_addr sin_addr;——IP地址
      
      char sin_zero[8]; ——对齐
      
      }
    • hostent

      域名和ip地址的数据结构

      struct hostent{
      
      char *h_name; ——正式主机名
      
      char **h_aliases; ——主机别名
      
      int h_addrtype; ——IP地址类型 IPV4-AF_INET
      
      int h_length; ——IP地址字节长度,对于IPV4是4字节,即32位
      
      char **h_addr_list; ——IP地址列表
      
      }

二、UDP套接字编程

在客户端与服务器之间没有连接,传送的数据可能乱序,也可能丢失

  • 没有握手
  • 发送端在每一个报文中明确指定目标IP地址和端口
  • 服务器必须从收到的分组中提取发送端的IP地址和端口号

通信过程与TCP基本相同,只是没有连接过程,服务端的监听socket来处理具体的请求

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153691.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!