Python服务器没有使用对客户端发送的消息的应答返回

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 !=

我正在尝试制作一个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()

这两个文件都成功运行,没有任何错误,但是服务器没有将任何结果返回给客户端

如果您在计算机上同时使用这两个程序,则首先需要将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()当圆括号中未提及任何内容时,函数默认使用这些默认参数