socket简介

简单理解Socket

socket是网络编程的一个概念,使用户更方便的使用底层的协议。

img

socket 其实就是一个五元组,可以标识一条可用的连接。

源IP, 源端口, 目的IP, 目的端口, 类型(TCP or UDP) 

比如[110.122.144.166:45678, tcp, 110.88.92.104:80] 
源IP为你的出口IP地址 110.122.144.166,源端口为随机端口45678
目的IP为百度的某一个负载均衡服务器IP 110.88.92.104,端口为HTTP标准的80端口。

使用socket进行通信的流程

img

  • 双方创建socket(每个 socket 被创建后,都会分配两个缓冲区,即输入缓冲区和输出缓冲区),其中服务端的socket需要绑定一个端口,一个进程最多可以创建1024个socket绑定这同一个端口(linux系统默认限制一个用户进程最多只能同时维持1024个文件描述符)。
  • 在这两个socket之间建立连接
  • 对socket使用send函数和recv函数来传输数据(send函数先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器,recv函数则是TCP协议先接受数据到缓冲区,然后再从缓冲区读取数据)

TCP套接字的I/O缓冲区示意图

  • 关闭连接
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,你可以使用`socket`模块来实现UDP协议的网络通信。下面是一个示例代码,演示了如何使用UDP协议发送元组数据: ```python import socket import pickle # 目标主机的IP地址和端口号 host = '目标主机的IP地址' port = 目标主机的端口号 # 要发送的元组数据 data = (1, 2, 3, 4, 5) # 创建UDP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 序列化元组数据 serialized_data = pickle.dumps(data) # 发送数据 sock.sendto(serialized_data, (host, port)) # 关闭套接字 sock.close() ``` 在上述代码中,我们首先指定目标主机的IP地址和端口号。然后,我们创建一个UDP套接字,使用`socket.socket()`函数指定`socket.AF_INET`参数表示使用IPv4地址族,`socket.SOCK_DGRAM`参数表示使用UDP协议。接下来,我们使用`pickle`模块的`dumps()`函数将元组数据序列化为字节流。最后,我们使用套接字的`sendto()`方法发送序列化后的数据到指定的目标主机和端口号。最后,我们关闭套接字。 接收方可以使用类似的方式接收UDP数据并反序列化为元组。请确保发送方和接收方在序列化和反序列化时使用相同的方法(例如,都使用`pickle`模块)。 需要注意的是,UDP是无连接的协议,发送方和接收方之间不会建立持久的连接。因此,发送方需要在每次发送数据之前指定目标主机的IP地址和端口号。如果需要建立持久的连接,可以考虑使用TCP协议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值