首页 > 解决方案 > 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()

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

标签: pythonpython-3.x

解决方案


我改变你的代码一点点服务器代码

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()

推荐阅读