socket.listen(n)
简单来说,这里的nt表示socket的”排队个数“
- 一般情况下,一个进程只有一个主线程(也就是单线程),那么socket允许的最大连接数为: n + 1
- 如果服务器是多线程,比如上面的代码例子是开了2个线程,那么socket允许的最大连接数就是: n + 2
- 换句话说:排队的人数(就是那个n) + 正在就餐的人数(服务器正在处理的socket连接数) = 允许接待的总人数(socket允许的最大连接数)
客户端-发送数据
import socket, json
client = socket.socket()
# 连接服务器
addr = ('0.0.0.0', 5050)
client.connect(addr)
data = {"time":1604560567884,"sip":"30101012","alarmType":"Battery","type":"alarm"}
# 发送数据
client.send(json.dumps(data).encode())
client.close()
服务端-接收数据
address = ('0.0.0.0', 5050)
# 创建socket对象,同时设置通信模式,AF_INET代表IPv4,SOCK_STREAM代表流式socket,使用的是tcp协议
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定到我们刚刚设置的ip和端口元组,代表我们的服务运行在本机的9999端口上
server.bind(address)
# 开始监听,5位最大挂起的连接数
server.listen(5)
while True:
print("server waiting")
# accept()方法被动接受客户端连接,阻塞,等待连接.
# client是客户端的socket对象,可以实现消息的接收和发送,addr表示客户端的地址
client, addr = server.accept()
data = client.recv(1024) # 代表从发过来的数据中读取1024byte的数据
if data:
data = data.decode()
input_Q = json.loads(data)
print(input_Q)
self.jindeeAlarmDataService.saveAlarmData(input_Q)
server.close()