Python本地服务器/客户端网络代码进行两个数字的加减乘除?

0 投票
3 回答
3301 浏览
提问于 2025-04-16 12:07

我最近在读一本叫《Python网络编程基础》的书,因为我对计算机网络很感兴趣。为了练习,我根据书里前面几个示例程序写了一些代码。在这个例子中,我“写”了一个TCP服务器,它绑定在本地计算机和一个随机端口上,还有一个客户端连接到本地计算机。客户端给服务器发送一个字符串,这个字符串包含两个数字和一个用空格分开的操作符(比如说 '5 x 4'),然后服务器会计算这个表达式并返回结果。我的代码如下:

#!/usr/bin/env python

import socket, sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

HOST = '127.0.0.1'
PORT = 1060

if sys.argv[1] == 'server':
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind((HOST, PORT))
    s.listen(1)
    while True:
    print 'Now listening at: ', s.getsockname()
    sc, sockname = s.accept()
    print 'We have accepted a connection from', sockname
    print sc.getsockname(), 'is now connected to', sc.getpeername()
    message = sc.recv(1024)
    print 'The client wants to perform the operation: ' + message
    message = message.split()
        if message[1] == '+':
            result = float(message[0]) + float(message[2])
        elif message[1] == '-':
            result = float(message[0]) - float(message[2])
        elif message[1] == '*':
            result = round(float(message[0]) * float(message[2]), 3)
        elif message [1] == '/':
            result = round(float(message[0]) / float(message[2]), 3)
    sc.sendall('The result is ' + str(result))
    sc.close()
    print 'Reply sent as ' + str(result) + '.'
    print

elif len(sys.argv) == 5 and sys.argv[1] == 'client':
    s.connect((HOST, PORT))
    print 'You are now connected to: ', s.getsockname()
    s.sendall(sys.argv[2] + ' ' + sys.argv[3] + ' ' + sys.argv[4])
    reply = s.recv(1024)
    print 'The return value is', repr(reply)
    s.close()

else:
    print >>sys.stderr, 'usage: addStream.py server or addStream.py client num1 +/-/*// num2'

我想问的是:这样做是最好的方法吗?还是有更好的方法呢?

谢谢!

3 个回答

-1

往后来说,使用某种网络包会比单纯依赖Python自带的库要简单得多。我觉得0MQ是个不错的起点,它有简单易用的Python接口,很多你已经学到的知识依然适用,而且它运行速度快,效率高。

此外,它并不限制你在应用的所有部分都使用Python,也不在乎你用什么传输方式,比如进程内、进程间、TCP等等。

http://zeromq.github.com/pyzmq/

-1

我用这个做过一些小项目:http://docs.python.org/library/asynchat.html

根据文档的说法,这个更适合处理输入输出(i/o)比较多的服务器,而不是处理计算(cpu)比较多的服务器。

2

Twisted 是目前最好的网络引擎之一。它能处理你想要的所有功能,而且代码写得很友好,对你的电脑的CPU和输入输出操作都很友好。

撰写回答