简单介绍一下Socket通信

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;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函数读取 消息,直到数据读完。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/221463.html<

(0)
运维的头像运维
上一篇2025-04-15 01:17
下一篇 2025-04-15 01:18

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

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