python socket
视频连接
https://www.imooc.com/video/17679
socket 是什么?
- socket 是电脑网络中 进程间数据流的 端点。
- socket 是操作系统的通信机制。
- 应用程序通过socket进行网络的传输。
简单的TCP过程
客户端 -----> 发送SYN报文,设置随机数序号X -------->服务器
(SYN=1 Seq=X ACK=0)
客户端 <------- 设置SYN+ACK报文,这只随机数列号Y<---- 客户端接收到数据
(SYN=1 Seq=Y ACK=X+1)
客户端 -----> 发送ACK报文 设置随机***X --------> 服务器
( Seq=X+1 ACK=Y+1)
服务器最后一次接收到客户端请求后,服务器和客户端形成一条通路
socket通信过程
socket通信过程 其实就是TCP通信过程
socket使用的是TCP协议
socket的通信方式
- TCP
- UDP
socket server
import socket
"""服务器"""
# 实例化
sk = socket.socket()
# def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
# ip 和 端口号
ip_port = ("127.0.0.1",8888)
# 绑定监听
sk.bind(ip_port)
# 设置socket最大连接数
sk.listen(5)
# 5表示socket最大监听是5个 #1个执行,四个等待,第6个请求会被抛弃。
print("等待接收数据")
# 接收数据,阻塞状态
conn,address = sk.accept()
#连接对象,对方地址
# 定义返回信息
msg = "hello world"
#返回信息,python3发送的都是byte类型,如果发送str,需要编码
conn.send(msg.encode())
#主动关闭
conn.close()
client socket
import socket
"""客户端"""
client = socket.socket()
ip_port = ("127.0.0.1",8888)
# 连接服务器
client.connect(ip_port)
#接收主机信息
data = client.recv(1024)
# 打印接收的数据
print(data.decode())
进行连续的数据交互
import socket
"""服务器"""
# 实例化
sk = socket.socket()
# def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
# ip 和 端口号
ip_port = ("127.0.0.1",8888)
# 绑定监听
sk.bind(ip_port)
# 设置socket最大连接数
sk.listen(5)
# 5表示socket最大监听是5个 #1个执行,四个等待,第6个请求会被抛弃。
while True:
print("等待接收数据")
# 接收数据,阻塞状态
conn,address = sk.accept()
#连接对象,对方地址
# 定义返回信息
msg = "连接成功"
#返回信息,python3发送的都是byte类型,如果发送str,需要编码
conn.send(msg.encode())
while True:
data = conn.recv(1024)
print(data.decode())
if data == b'exit':
break
conn.send(data)
conn.send("hello".encode())
#主动关闭
conn.close()
##############################
import socket
"""客户端"""
client = socket.socket()
ip_port = ("127.0.0.1",8888)
# 连接服务器
client.connect(ip_port)
while True:
data = client.recv(1024)
print(data.decode())
# 自定义发送的消息
msg_input = input("请输入: ")
client.send(msg_input.encode())
if data == b'exit':
break
data = client.recv(1024)
print(data.decode())
socket UDP
....to c