通俗讲解什么是Socket通讯

Socket通讯原理

1、什么是Socket?

Socket,即套接字。就是两台主机之间逻辑连接的端点。(通俗来说:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket)。

Socket是一套用于不同主机之间通信的API,它工作在我们的TCP/IP协议栈之上,可应用于浏览器、手机应用或用于服务器管理的SSH客户端等。

要通过Socket与不同主机建立通信,我们只需要指定主机的IP地址和一个端口号。

  • IP地址用于唯一标志你的网络设备

  • 端口主要用于区分主机上的不同应用(没有端口,操作系统没有办法区分数据到底应该发送到哪一个应用上)

通过Socket我们可以建立一条用于不同主机,不同应用之间的虚拟数据通道,并且它是点对点(应用对应用)的,可以将其比喻为将一条数据线连接在不同应用的插槽上,这也是socket这个名字的由来。

2、Socket的类型

常用的Socket的类型有两种:TCPUDP

2.1 TCP-传输控制协议

特点1:TCP是可靠的,它的底层会自动检测并回传丢失的数据包,因此对于调用者来说,你发送的数据对方一定会接受到。

特点2:发送和接受到的数据顺序是完全一致的,比如你发送了一段字符,对方就一定会原封不动的收到同样的字符串,这也就是为什么说TCP是基于“数据流”的协议。

TCP要求收发数据的双方扮演不同的角色:服务器和客户端。

服务器会被动等待客户端的连接,它自己不会主动发起请求。

2.2 UDP-用户报文协议

UDP以报文(Datagram)为单位来收发数据,并且UDP不会自动回传丢失的数据包,因此不保证数据一定能被对方接受到。

正是因为缺少了这些检查,UDP通常具有更低的延迟并占用更少的系统资源,它也更适合于像视频语音通话这种实时性要求较高的应用。

3、在两端间传数据

通过Socket,我们可以将与某台机子建立连接,如果想要在两端间传份数据:

两端各执行socket()方法,得到fd句柄之后,对于服务端依次执行bind()、listen()、accept()方法,然后坐等客户端的连接请求执行connect()方法,向服务端发起建立连接的请求,连接建立完成后,客户端可以执行send()方法发送消息,服务端可以执行recv()接受消息。

反过来,服务器也可以执行send()发送消息,客户端执行recv()接受消息。

服务端是怎么区分多个客户端的?

客户端发来的数据包上会有源IP地址和端口,以及目的IP地址和端口,这四个元素构成一个四元组,可以用于唯一标记一个客户端。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Socket(套接字)是计算机网络编程中的一个概念,它提供了一种通信机制,使得不同的进程(程序)之间可以在网络上相互通信Socket 可以看作是一种特殊的文件,它支持在网络上读写数据,通过 Socket 可以实现进程之间的通信和数据交换。 Socket 通常是指一个 IP 地址和一个端口号的组合,这个组合可以唯一标识网络中的一个进程(程序)。在网络通信中,Socket 通常会被分为客户端和服务器端两种类型。客户端负责向服务器发送请求,并等待服务器的响应;服务器端则负责接收客户端请求,并返回相应的数据。 Socket 编程一般分为以下几个步骤: 1. 创建 Socket:使用 socket() 函数创建一个 Socket,指定协议类型(如 TCPUDP)、IP 地址和端口号等参数。 2. 绑定 Socket:使用 bind() 函数将 Socket 绑定到指定的 IP 地址和端口号上,使得其他进程可以通过这个地址和端口号来访问该进程。 3. 监听 Socket:使用 listen() 函数将 Socket 设置为监听状态,等待客户端请求的到来。 4. 接受连接:使用 accept() 函数接受客户端的连接请求,返回一个新的 Socket,用于与客户端进行通信。 5. 发送和接收数据:使用 send() 和 recv() 函数进行数据的发送和接收。 6. 关闭 Socket:使用 close() 函数关闭 Socket,释放资源。 Socket 编程是一种基于网络通信的编程方式,它可以实现进程之间的通信和数据交换,是网络编程领域中非常重要的一种技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白天数糖晚上数羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值