iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Socket通信的示例分析
  • 882
分享到

Socket通信的示例分析

2023-06-27 11:06:28 882人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关Socket通信的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信

这篇文章将为大家详细讲解有关Socket通信的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

Socket通信的示例分析

socket通信方式是进程通信的一种,先列举一下进程通信的种类:1)管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用。进程的 亲缘关系通常是指父子进程关系。2)有名管道(FIFO):有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,管道是先进 先出的通信方式。3)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种机制,防止某进程 正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手 段。4)消息队列:消息队列是有消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息 少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。5)信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。6)共享内存( shared memory) 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制 如信号量,配合使用,来实现进程间的同步和通信。7)套接字( socket ) :套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程 通信。

对于socket来说可以用于不同机器间的进程通信,一般情况下使用socket比较多,常见的接口有socket、bind、listen、connect、accept、send、recv、close.这里不对具体函数的处理进行细说,只对某些细节进行描述。

1:对于服务端来函数调用的顺序是 socket –> bind –> listen ->accept

首先使用socket函数创建一个socket描述符,创建后可以使用setsockopt设置socket选项,常见选项:SO_REUSEPORT设置这个选项可以重复使用端口号,例如如果tcp连接处于TIME_WaiT状态,则在2MSL时间内无法重复使用这个端口 这样如果现在有服务器尝试 bind这个端口就会失败,使用这个选项就可以解决这个问题.TCP_nodeLAY关闭TCP的Nagle,缺省情况下Nagle算法是使能的.

2:使用listen函数来侦听socket上的连接请求,函数原型是:

int listern(int sockfd ,int backlog)其中的第二个参数 backlog的作用是指定侦听socket最大未完成的连接个数,对于INET的TCP来说,server收到 来自客户端的连接请求后,为该连接请求新创建一个SOCKET,并且把该SOCKET放到接收连接的队列中;当连接建 立后,把新创建的SOCKET从接收队列中清除。如果在某种情况下应用层来不及调用accept()接收连接,而此时有 很多客户端在向server发起连接,就可能使server端接收连接队列无限增长,为防止这种情况,在listen函数中 指定对server端的SOCKET的接收队列长度的限制。默认值为128,设置大于128时实际取值128。如果server端的 接收连接的socket接收队列超过backLog的值,则新的连接请求被拒绝。

3:消息发送接收函数

TCP用send 和 recv:这是因为每个TCP都有一个连接,每次连接完成后,都会把连接的信息记录在socket中,这 样每次收发数据都知道对方和自己的IP地址还有端口号,无需再次指定。记录是发生在accept和connect调用完 成后。1)connect 调用因为只有一个socket连接,就记录在本地。2)而对于accept由于有多个连接,所以accept会返回一个socket对象,对应一个TCP连接,记录对应的IP和端口

UDP 利用 sendto() 和 recvfrom()1)recvfrom 会返回发送端的地址,这样对服务器来说,由于是UDP socket对象没有记录对应的IP和端口信息, 会需要使用用到改地址给客户端带来响应。对于客户端,由于每次始终是知道服务器IP地址和端口(和一个服务器交互),所以无需记录(除非UDP客户端 需要和多个服务器交互,需要一一记录,才能确保交互正确)2)sendto由于没有记录IP 和端口在 socket 对象中,所以每次都需要指定接受方地址,无论是客户端和服务器都需要用

4:socket与epoll结合使用

在进程通信中,经常使用socket与epoll相结合的方式处理连接请求和消息发送,首先服务器创建socket描述符, 使用bind绑定指定端口,并发起监听,然后将socket描述符放到epoll中,这样客户端的连接请求就可以由epoll来 通知socket服务端,如果有客户端的连接请求后,使用accept函数创建新的描述符,并将这个新的描述符放入epoll 中这个新的socket描述符是用来监听客户端发来的消息的,如果有消息可读,那么就可以死循环使用recv函数读取 消息,直到数据读完。

关于“Socket通信的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Socket通信的示例分析

本文链接: https://www.lsjlt.com/news/310108.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Socket通信的示例分析
    这篇文章将为大家详细讲解有关Socket通信的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信...
    99+
    2023-06-27
  • C#异步通信的示例分析
    这篇文章主要为大家展示了“C#异步通信的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#异步通信的示例分析”这篇文章吧。C#异步通信概念及应用的认识首先让我们来看看:在网络编程中运用S...
    99+
    2023-06-17
  • Vue组件通信的示例分析
    这篇文章主要介绍Vue组件通信的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实践方法由于更换新的框架,我们的项目由Avalon更新成Vue.但是为了兼容以前的业务代码,不能...
    99+
    2024-04-02
  • Linux进程通信的示例分析
    这篇文章主要为大家展示了“Linux进程通信的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux进程通信的示例分析”这篇文章吧。linux下的多个进程间的通信机制叫做IPC(,它是...
    99+
    2023-06-28
  • Angualr组件间通信的示例分析
    这篇文章主要介绍Angualr组件间通信的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Angualr 组件间通信约定: 遵循Angular官方的说法,下文中的Angular...
    99+
    2024-04-02
  • Linux中进程通信的示例分析
    这篇文章将为大家详细讲解有关Linux中进程通信的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数...
    99+
    2023-06-27
  • VB.NET Socket编程的示例分析
    小编给大家分享一下VB.NET Socket编程的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!下面通过例子来学习VB.NET Socket编程类的应用,下面的程序分别分服务器和客户端两部分:ImportsSyst...
    99+
    2023-06-17
  • WebSocket中通信过程的示例分析
    小编给大家分享一下WebSocket中通信过程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是 WebSocket...
    99+
    2024-04-02
  • SOCKET之多线程的示例分析
    这篇文章主要介绍了SOCKET之多线程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。多线程的原理图:可以理解成成10086的多个客...
    99+
    2024-04-02
  • html5的websockets全双工通信示例分析
    本篇内容介绍了“html5的websockets全双工通信示例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • 实时通信Socket io的使用示例详解
    目录引言1、什么是socket.io2、socket.io的使用3、客户端自带事件4、版本问题引言 最近在工作中,遇到了一个需求,需要和后台服务实时通信,获取各种设备的实时状态、以及...
    99+
    2022-11-16
    Socket io实时通信 Socket io
  • docker容器之间通信的示例分析
    这篇文章将为大家详细讲解有关docker容器之间通信的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。容器之间的通信  # 执行一个容器,并分配一个名字给它 ...
    99+
    2023-06-17
  • Python中进程间通信的示例分析
    这篇文章给大家分享的是有关Python中进程间通信的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。进程概述进程(Process)是计算机中已运行程序的实体。进程与程序不同,程序本身只是指令、数据及器组织形...
    99+
    2023-06-29
  • 实现Vue和Flask通信的示例分析
    这篇文章给大家分享的是有关实现Vue和Flask通信的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。安装axios和实现通信这里我们通过axios来连接Vue前端和Flask后端,使用AJAX请求进行通信...
    99+
    2023-06-15
  • angular父子组件通信的示例分析
    这篇文章主要介绍angular父子组件通信的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!用到的apiInput - 子组件中定义可接受的属性,可以用来父组件给子组件传递数据Output - 子组件中定义输出...
    99+
    2023-06-22
  • Vue中Axios异步通信的示例分析
    这篇文章将为大家详细讲解有关Vue中Axios异步通信的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先我们创建一个.json文件,作为交互使用,我们列举json数据格式模拟传递到前端来帮助小伙...
    99+
    2023-06-25
  • PHP中SOCKET编程的示例分析
    这篇文章主要介绍了PHP中SOCKET编程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 预备知识一直以来很少看到有多少人使用php的socket模块来做一些事...
    99+
    2023-06-15
  • python实现socket简单通信的示例代码
    首先先来简单介绍下socket: (具体更详细介绍的可以在网上找找,都讲得非常详细),这里主要是我自己的一些理解。 socket是在应用层与传输层之间的一个抽象层,它的本质是编程接...
    99+
    2024-04-02
  • java利用socket通信实现Modbus-RTU通信协议的示例代码
    Modbus Modbus是一种串行通信协议。Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,...
    99+
    2024-04-02
  • vue2.0父子组件间通信的示例分析
    这篇文章主要介绍了vue2.0父子组件间通信的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.父组件传递数据给子组件父组件数据如何...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作