Python服务器没有使用对客户端发送的消息的应答返回
我正在尝试制作一个python数学服务器。用户(客户端)可以向服务器发送包含操作数和运算符的消息。服务器应接收并计算结果,然后将结果发回。但是,由于某些原因,我的服务器没有返回结果 这是我的client.py文件Python服务器没有使用对客户端发送的消息的应答返回,python,python-3.x,Python,Python 3.x,我正在尝试制作一个python数学服务器。用户(客户端)可以向服务器发送包含操作数和运算符的消息。服务器应接收并计算结果,然后将结果发回。但是,由于某些原因,我的服务器没有返回结果 这是我的client.py文件 import socket host = socket.gethostname() port = 5000 client_socket = socket.socket() client_socket.connect((host,port)) r = "no" while r !=
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()
这两个文件都成功运行,没有任何错误,但是服务器没有将任何结果返回给客户端如果您在计算机上同时使用这两个程序,则首先需要将ip绑定到主机bind 127.0.0.1 在socket.socket中,您必须知道您使用的是哪种套接字 差不多
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
你们可以一次发送一个东西,所以把你们所有的数据包装在一个变量中,把它发送到服务器,然后再次拆分,最后你们把消息返回给客户端,它不是字符串,它是int,你们不能编码它,所以把你们的消息变量改成str,我稍微修改一下你们的代码 服务器代码
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()
客户端是否正在侦听端口?我在代码中看不到这一点,服务器将结果返回到哪里@ᴀʀᴍᴀɴ他的客户机有
.recv()
我相信,这足以接收服务器的响应。也许问题出在某个地方else@tom-jonh尝试按照此指南操作echo客户端和服务器:@ViacheslavShalamov在哪个端口上?他们两个都是5000@ᴀʀᴍᴀɴ客户端端口将自动分配。客户端上的端口5000用于连接到服务器。socket.socket()
默认为socket.socket(socket.AF\u INET,socket.SOCK\u STREAM)
tnx我不知道我总是在它上面定义套接字类型,通过我发送的答案,我让程序运行work@hamzeh_pmsocket.socket()当圆括号中未提及任何内容时,函数默认使用这些默认参数