python - Python 服务器没有回复客户端发送的消息的答案
问题描述
我正在尝试制作一个 python 数学服务器。用户(客户端)可以向包含操作数和操作符的服务器发送消息。服务器将接收它并计算它并将结果发回。但是我的服务器由于某种原因没有发回结果
这是我的 client.py 文件
import socket
host = socket.gethostname()
port = 5000
client_socket = socket.socket()
client_socket.connect((host,port))
r = "no"
while r != "exit":
op1 = input('enter operand 1:')
op2 = input('enter operand 2:')
op = input('enter operator:')
client_socket.send(op1.encode())
client_socket.send(op2.encode())
client_socket.send(op.encode())
result = client_socket.recv(1024).decode();
print("answer:",result)
r=input("enter exit to stop:")
client_socket.close()
这是我的 server.py 文件
import socket
host = socket.gethostname()
port = 5000
server_socket = socket.socket()
server_socket.bind((host,port))
server_socket.listen(1)
conn , address = server_socket.accept()
while True:
op1 = conn.recv(1024).decode()
if not op1:
break;
op2 = conn.recv(1024).decode()
op = conn.recv(1024).decode()
if op == '+':
message = int(op1) + int(op2)
elif op =='-':
message = int(op1) - int(op2)
elif op =='*':
message = int(op1) * int(op2)
else : message = int(op1) / int(op2)
conn.send(message.encode())
server_socket.close()
两个文件都成功运行,没有任何错误,但是服务器没有将任何结果返回给客户端
解决方案
我改变你的代码一点点服务器代码
import socket
host = '127.0.0.1'
port = 5000
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen()
conn , address = server_socket.accept()
while True:
data = conn.recv(1024).decode()
print(data)
if not data:
break;
if data.find('+') != -1:
list_data = data.split('+')
op1 = list_data[0]
op2 = list_data[1]
op = '+'
if data.find('*') != -1:
list_data = data.split('*')
op1 = list_data[0]
op2 = list_data[1]
op = '*'
if data.find('-') != -1:
list_data = data.split('_')
op1 = list_data[0]
op2 = list_data[1]
op = '-'
if data.find('/') != -1:
list_data = data.split('/')
op1 = list_data[0]
op2 = list_data[1]
op = '/'
if op == '+':
message = int(op1) + int(op2)
elif op =='-':
message = int(op1) - int(op2)
elif op =='*':
message = int(op1) * int(op2)
else : message = int(op1) / int(op2)
conn.send(str(message).encode())
server_socket.close()
客户代码
import socket
host = '127.0.0.1'
port = 5000
client_socket = socket.socket()
client_socket.connect((host,port))
r = "no"
while r != "exit":
op1 = input('enter operand 1:')
op2 = input('enter operand 2:')
op = input('enter operator:')
data = op1 + op + op2
client_socket.sendall(data.encode())
result = client_socket.recv(1024).decode();
print("answer:",result)
r=input("enter exit to stop:")
client_socket.close()
推荐阅读
- swift - 为特定类型的 Collection 添加协议一致性
- php - 如何在我的 WooCommerce 商店的某个位置显示特定产品?
- javascript - 批量替换 HTML 文章值
- r - 循环重新采样数据框中两列的组合
- reactjs - 页面变得无响应并在控制台中出现 404 错误
- angular - 如何以角度从另一个不相关的组件重置表单
- android - 使用 firebase_messaging 自定义通知(Android 和 IOS)
- php - 一个字符串出现在另一个字符串中
- scala - Scala中基于String选择案例类
- python - Seaborn 散点图在 y-tick 中的重叠点