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

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

oasises123 回答:Python服务器未回复客户端发送的消息的答案

首先,如果您在计算机上同时使用两个程序,则需要将ip绑定到主机上,将其绑定为127.0.0.1 在socket.socket中,您必须告诉您使用哪种套接字 像

socket.socket(socket.AF_INET,socket.SOCK_STREAM)

,您可以一次性发送1件事,因此将所有数据包装到一个变量中,然后将其发送到服务器,然后再次拆分,最后将消息返回给客户端,它不是字符串,它是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()
本文链接:https://www.f2er.com/3167850.html

大家都在问