点对点通信

点对点通信点对点通信client/server

大家好,又见面了,我是你们的朋友全栈君。

首部


点对点通信

Client / Server

通信模型

服务端

1. 创建通行节点-`socket`
2. 绑定-`bind`
3. 监听-`listen`
4. 接受连接-`accept`
5. 发送/接受数据- `write/read `或 `send/recv`
6. 断开连接,-`close`

接口设计

2021-01-19_11-38

客户端

1. 创建通信节点-`socket`
2. 连接服务器-`connect`
3. 发送/接受数据- `write/read `或 `send/recv`
4. 断开连接,-`close`

接口设计

2021-01-18_19-18


API-linux

socket

       #include <sys/types.h>          /* See NOTES */
       #include <sys/socket.h>

       int socket(int domain, int type, int protocol);

功能:

  • 创建一个通行端点

入口:

  • domain -协议域
   AF_UNIX AF_LOCAL     Synonym for AF_UNIX	//本地通信协议
   AF_INET      IPv4 Internet protocols  
   AF_INET6     IPv6 Internet protocols  
  • type -套接字类型
   SOCK_STREAM     Provides sequenced, reliable, two-way, connection-based
                   byte  streams.  An out-of-band data transmission mecha‐
                   nism may be supported.
                   // 基于连接的有序可靠双向的字节流通信方式

   SOCK_DGRAM      Supports datagrams (connectionless, unreliable messages
                   of a fixed maximum length).
       			   // 无连接不可靠的有固定长度的数据报通信方式
  • protocol-通信协议
    • 默认值-0

返回值:

  • 成功-返回一个套接字描述符号
  • 失败- -1 设置errno

bind

       #include <sys/types.h>          /* See NOTES */
       #include <sys/socket.h>

       int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);

函数功能:

  • 将套接字绑定到监听端口

入口:

  • sockfd-服务套接字描述符
  • addr-服务套接字内存地址
  • addrlen-服务套接字内存长度

出口:

  • 0-正常

listen

       #include <sys/types.h>          /* See NOTES */
       #include <sys/socket.h>

       int listen(int sockfd, int backlog);

功能:

  • 监听服务套接字

参数:

  • sockfd-服务套接字描述符
  • backlog-同时连接的最大个数

返回:

  • 0-正常

accept

   #include <sys/types.h>          /* See NOTES */
   #include <sys/socket.h>

   int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

功能:

  • 接受连接-(如:tcp三次握手)

参数:

  • sockfd-服务套接字描述符
  • addr-连接套接字的内存地址
  • addrlen-地址内存长度

返回:

  • 连接套接字的描述符 -1-错误

connect

   #include <sys/types.h>          /* See NOTES */
   #include <sys/socket.h>

   int connect(int sockfd, const struct sockaddr *addr,
               socklen_t addrlen);

功能:

  • 发起连接

参数:

  • socked-客户套接字描述符
  • addr-服务套接字的内存地址
  • addrlen-地址内存长度

返回:

  • 0-正常

注意

管道破裂

场景:

  • 通信双方在通信过程中,一方直接退出,另一方仍然向已退出一方,继续输送数据。

后果:

  • 未退出一方的操作系统,向该进程发送一个 SIGPIPE 信号
  • 该信号量默认关闭程序

解决方法:

  • 捕获该信号
  • 更改代码 – 管道的一端关闭时,不再向管道内写数据

TCP断开等待

场景:

  • 通信双方在通信过程中,一方主动断开后,立即重用

后果:

  • 显示address already in use

解决:

  • 等待1-分钟
  • 设置套接选项,允许立即重新适用地址与端口

无FIN-下线

场景:

  • 在连接双方通信过程中,无FIN结束报文,直接断开连接

后果:

  • read-所读取实际长度<预设长度

用途:

  • 可将实际长度与预设长度对比-判断对方是否在线
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154651.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea 2022 3.2激活码[最新免费获取]「建议收藏」

    (idea 2022 3.2激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1M2OME2TZY-eyJsaWN…

    2022年3月13日
    152
  • 【SQL】SQL中distinct的用法

    【SQL】SQL中distinct的用法转载自:https://www.cnblogs.com/leonlee/p/6042461.html1.作用于单列2.作用于多列3.COUNT统计4.distinct必须放在开头5.其他在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词distinct用于返回唯一不同的值。表A:表B:1.作用于

    2022年7月20日
    21
  • 【Java面试】第一章:P5级面试

    HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们…

    2022年4月7日
    41
  • rabbitmq集群搭建_集群搭建步骤

    rabbitmq集群搭建_集群搭建步骤MQ为什么要使用集群?单机版无法满足真实应用的要求,如果RabbitMQ服务器遇到内存崩溃、机器掉电或者主板故障等情况况,该怎么办?单台RabbitMQ服务器可以满足每秒1000条消息的吞吐量,那么如果应用需要RabbitMQ服务满足每秒10万条消息的吞吐量呢?购买昂贵的服务器来增强单机RabbitMQ务的性能显得不足,此时搭建一个RabbitMQ集群才是解决实际生产中问题的关键。准备环境虚拟机环境:VMware®Workstation16Pro虚拟机版本:16.1.2build-1

    2025年10月20日
    3
  • MySQL——MySQL 图形化管理工具的介绍

    MySQL——MySQL 图形化管理工具的介绍文章目录MySQL——MySQL图形化管理工具的介绍1、MySQLWorkbench2、Navicat3、SQLyog4、DBeaver5、DataGripMySQL——MySQL图形化管理工具的介绍MySQL图形化管理工具极大地方便了数据库的操作与管理,常用的图形化管理工具有:MysQLWorkbench、phpMyAdmin、NavicatPreminum、MySQLDumper、SQLyog、dbeaver、MysQLODBcConnector、DataGrip。1、MySQL

    2022年6月30日
    26
  • 【学习】Deep Learning for Deepfakes Creation and Detection[通俗易懂]

    【学习】Deep Learning for Deepfakes Creation and Detection[通俗易懂]论文题目:DeepLearningforDeepfakesCreationandDetection翻译:基于深度学习的Deepfake创建与检测作者:ThanhThiNguyen*1,CuongM.Nguyen2,DungTienNguyen1,DucThanhNguyen1andSaeidNahavandi31SchoolofInformati…

    2022年5月9日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号