【问题标题】:Getting input from client in python在python中从客户端获取输入
【发布时间】:2018-09-16 17:02:44
【问题描述】:

我正在用 Python 编写客户端-服务器 TCP 连接,并要求客户端从函数列表中选择一些函数,其中之一是斐波那契。因此,在客户端选择斐波那契之后,我希望他被要求输入一个数字,并将该数字发送到斐波那契函数参数,然后将值从服务器返回给客户端。

def FIBONACCI(n):
   if n == 0: return 0
   elif n == 1:  return 1
   else: return (FIBONACCI(n-1)+FIBONACCI(n-2))

我使用不带参数的函数,它们可以工作,但我没有看到任何带参数的东西。 输入是否应该写在客户端,以及它如何发送到服务器等等? P.S 我已经使用 sendall 发送了输入 FIBONACCI,我尝试再次为参数执行此操作,但它似乎不起作用......我希望我很清楚。 这就是函数的调用方式:

def requests (keyword):
   if (keyword == "FIBONACCI"):
   return FIBONACCI(n)

【问题讨论】:

  • 所以工作流程就像client: 输入一个整数,然后将这个整数发送到服务器,最后等待服务器的响应。 服务器:从客户端接收整数,然后计算斐波那契,最后将结果发送回相关客户端?
  • 没错,但首先它从客户端获取输入斐波那契来调用函数。

标签: python function sockets parameter-passing


【解决方案1】:

我在服务器和客户端之间做了一个小聊天程序类型。

这是server.py

import socket;
import sys;
import thread;

try:
    s = socket.socket();
    port = 12345;
    s.bind(('', port));
    s.listen(5);
    i = 0;

    def main(c,numOfThread):
        while True:
            rcvdData = c.recv(1024).decode();
            print "Thread:", numOfThread+1, "S:", rcvdData;
            sendData = raw_input("N: ");
            c.send(sendData.encode());
            if(sendData == "Bye" or sendData == "bye"):
                break;
        c.close();

    while True:
        c, addr = s.accept();
        print "Socket Up and running with a connection from",addr;
        thread.start_new_thread(main,(c,i,));
        i+=1;

except KeyboardInterrupt:
    print "\nClosing Connection and freeing the port."
    c.close();
    sys.exit();

这是client.py:

import socket;

try:
    s = socket.socket();
    s.connect(('127.0.0.1',12345));
    while True:
        str = raw_input("S: ");
        s.send(str.encode());
        if(str == "Bye" or str == "bye"):
            break;
        print "N:",s.recv(1024).decode();
    s.close();
except KeyboardInterrupt:
    print "Closing Connection and freeing the port."
    s.close();
    sys.exit();

如您所见,只需从客户端获取输入,然后使用c.send(user_input) 发送它,然后同样您可以将数据从服务器发送到客户端。您可以调整此代码以满足您的需要。就像在server.py 中一样,您可以添加所有函数,然后在client.py 中您可以编写输入语句,例如“输入 1 表示斐波那契 2 表示加法……等等”获取该输入并将其发送到服务器。然后在服务器端检查输入匹配的数字,然后调用以下函数。

您也可以在调用函数之前询问用户输入数字,方法是向客户端发送有关用户选择了哪个函数的消息,然后client.py 将要求用户输入他/她想要的斐波那契数然后再次发送到server.py 并将其作为函数的输入。

所以基本上这里的关键是c.recv(1024)s.send(user_input)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2011-02-24
    • 2013-11-02
    • 2017-05-28
    • 2017-05-22
    相关资源
    最近更新 更多