项目中需要实现PC与树莓派通信完成控制,寻找一遍后,发现现例子大多比较简单,可以实现一次收发过程,第二次数据发送就会出现问题。观察发现少一个循环,无法保持联通状态,代码修改后可以简单的实现半双工通信,实现简单聊天应答功能。
首先在命令行下ipconfig 查出设备ip。client与server端为同一ip,以server端为准。
server端代码
import socket
HOST = '192.168.0.100' # 连接本地服务器
PORT = 8001 # 设置端口号
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 选择IPv4地址以及TCP协议
sock.bind((HOST, PORT)) # 绑定端口
sock.listen(5) # 监听这个端口,可连接最多5个设备
while True:
connection, address = sock.accept() # 接受客户端的连接请求
Building_connection = connection.recv(1024) # 接收数据实例化
if Building_connection==b"request":
print("connection is ok!")
connection.send(b'welcome to server!') #服务器已经连接
while Building_connection==b"request":
a= connection.recv(1024) #循环,持续通讯接收数据
if a==b"exit":
connection.send(b"close")
break
if a!=b"request"and a:
print("接收端:")
print((a).decode())
print("服务端:")
se=input()
connection.send((se).encode("utf-8"))
print("")
break
connection.close()
print("连接关闭")
client端代码
import socket
HOST = '192.168.0.100'
PORT = 8001
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
print("try to connect distance server")
sock.send(b'request')
re_mes=sock.recv(1024).decode()
print(re_mes)
if re_mes=="welcome to server!":
while 1:
print("接收端:")
a=input()
sock.send((a).encode("utf-8"))
print("服务端:")
re_mes=sock.recv(1024).decode()
if re_mes=="close":
break
print(re_mes)
print("")
sock.close()
print("连接关闭")
网友评论