什么是socket?
socket是一个模块,又称套接字,用来封装互联网协议(应用层以下的层)。
为什么要有socket?
socket可以实现 互联网协议 应用层以下的层的工作
-提高开发效率
怎么使用socket?
import socket
写socket套接字:
Client

server.py
#服务端
import socket
#获取手机
server = socket.socket()
#绑定ip地址,port端口
server.bind(('127.0.0.1',8500))
#半连接池
server.listen(5)#最多5个人坐椅子,实际上==6
print('server is running')
while True:
#conn为通道 ,等待电话的接入
conn,addr = server.accept()
print(addr)
while True:
try:
#接听对方假话的内容
#data客户端发送过来的消息
date = conn.recv(1024)
print(date.decode('utf-8'))
if len(date) == 0:
break
if date.decode('utf-8') == 'q':
break
send_date = input("服务端>>:")
#服务端往客户端发送消息
conn.send(send_date.encode('utf-8'))
except Exception as e:
print(e)
break
client.py
#客户端
import socket
#买手机
client = socket.socket()
#拨号 connect为连接
client.connect(('127.0.0.1',8500))#客户端的ip与port必须与服务端一致
print('client is running')
while True:
send_date = input("客户端>>:")
#必须发送bytes类型的数据
client.send(send_date.encode('utf-8'))
#接受date的数据
date = client.recv(1024)
if date.decode('utf-8') == 'q':
break
if len(date) == 0:
break
print(date.decode('utf-8'))
client.close()
粘包
1)问题:无法确认对方发送过来数据的大小。
2)问题:在发送数据间隔短并且数据量小的情况下,
会将所有数据一次性发送
确认:确认对方数据的大小
解决粘包问题(struct模块
-无论哪一端先发送数据
-客户端
1)先制作报头,并发送(struct)
2)发送真实数据
-服务端:
1)接受报头,并解包获取 真实数据长度
2)根据真实数据长度 接受真实数据
recv(真实数据长度)
来源:https://www.cnblogs.com/lvguchujiu/p/11991677.html