Python本地服务器/客户端网络代码进行两个数字的加减乘除?
我最近在读一本叫《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等等。
-1
我用这个做过一些小项目:http://docs.python.org/library/asynchat.html
根据文档的说法,这个更适合处理输入输出(i/o)比较多的服务器,而不是处理计算(cpu)比较多的服务器。
2
Twisted 是目前最好的网络引擎之一。它能处理你想要的所有功能,而且代码写得很友好,对你的电脑的CPU和输入输出操作都很友好。