点对点通信

点对点通信点对点通信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-所读取实际长度<预设长度

用途:

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • js字符串转html_vue文件如何编译成html

    js字符串转html_vue文件如何编译成htmlhtml代码如何转换成js文件这个很简单首先你要把html代码转成js代码有这种转换工具的搜下代码转换工具就可以再把你转换好了的代码放到文本中把后缀名改成点js就可以了可以用txt文档改js文件用记事本可以打开小编喝醉了酒,流入街头可怜的像条狗,哭着对你说别走,你义无反顾笑笑也不回头。把HTML代码放到document.write方法的括号中,并用引号括起来,将原来HTML中的引号进…

  • Typescript教程_typescript在线运行

    Typescript教程_typescript在线运行前言由于最近在使用vue3写项目,使用vue3的前提就是要学习TypeScript,TypeScript算是JavaScript的升级版,TypeScript包含JavaScript和自己的一些特性

  • google maps api_js调用谷歌浏览器接口

    google maps api_js调用谷歌浏览器接口一:基本知识:1.使用谷歌地图API的第一步就是要注册一个API密钥,需要注重一下两点:1.假如使用API的页面还没有发布,只是在本地调试,可以不用密钥,随便用个字符串代替就可以了。

  • python下载及安装教程[通俗易懂]

    python下载及安装教程[通俗易懂]   Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,一般默认装的是Python2版本,Windows系统上没有Pyhton环境,需要我们手动安装一下,现在一般都是python,目前最新是python3.9.7,下面就让跟着我进行安装吧!下载python安装包进入python官网下载(官网https://www.python.org/)。鼠标指向Downloads(不用点击)会弹出下拉框,直接点击windows下的Python3.9.7可直接下载

  • 虚拟机连不上网怎么办

    虚拟机连不上网怎么办 打开 控制面板\网络和Internet\网络和共享中心,单击更改适配器设置 2 右击本地连接,点击共享,勾选允许其他网络用户通过此计算机的Internet连接来连接(N)  文本框下选择 VMwareNetworkAdapterVMnet8 即VMwareNAT连接模式的网卡 3 右击VMwareNetworkAdapter…

  • kali制作安卓免杀木马_kali工具绑捆

    kali制作安卓免杀木马_kali工具绑捆Shellter是一款动态shellcode注入工具,我们可以将shellcode注入到其它程序上,从而来躲避杀毒软件的查杀。俗称为免杀官网:https://www.shellterproject.com/目前最新版本是7.2,主程序是.exe文件所以在windows下可以直接使用,在linux上运行的话就需要安装wine环境来运行。我使用的KaliLinux版本是kali-linu…

发表回复

您的电子邮箱地址不会被公开。

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