python通信连接



1,udp知识

UDP,User Datagram Protocol


IP地址作用
端口作用
套接字地址 (IP,PORT)


创建UDP套接字
import socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)


关闭UDP套接字
udp_socket.close()


使用UDP套接字发送数据
udp_socket.sendto(bytes类型数据, 收件人套接字地址)


使用UDP套接字接收数据 - 阻塞接收数据
bytes类型的数据, 发件人套接字地址 = udpp_socket.recvfrom(本次接收的最大长度)


使用固定端口-bind 
udp_socket.bind(本地套接字地址)


str -  bytes

2,tcp知识
    
1、TCP特点
面向连接 - 通信之前必须先建立连接
可靠传输
应答机制
超时重传
有序编号
校验机制
流量控制
2、TCP客户端流程
connect函数 创建和服务器之间的连接 
参数 服务器套接字(IP,port)


recv函数   接收TCP数据 - 阻塞等待


参数 表示本次接收的最大长度
返回值两种作用
正常情况  接收到的是对方发给自己的数据<bytes类型>
如果收到的数据是b''  说明对方断开连接


send函数  发送TCP数据
参数 表示发送的数据<bytes类型>
返回值 成功发送的字节数 -----了解


3. 服务器流程


listen函数
变为被动套接字 - 接受到来自客户端的连接
accept函数
客户端关联的套接字, 客户端地址 = accept() 阻塞等待 - 从等待服务器取出一个客户服务 




4. 2MSL状态
TCP规定 主动断开连接的一方 需要等待30s-2min  以 确认最后一次ACK一定被对方接收到


---> 导致了 TCP连接使用的端口 在30s-2min 内 不能理解重新再次绑定


解决方案  set socket option 设置套接字选项
sock.setsockopt()


5. 出现address in use问题的三种原因


1. pycharm同时启动了多个程序绑定同一个端口
2. pycharm 后台进程还在继续占用 之前的端口
3. TCP 2MSL时间


---  设置套接字选项 并且 终端运行
# 忽略2MSL时间规定 可以让TCP服务器不用等待2MLS时间可以理解重新绑定 之前的端口
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值