我最近一直在阅读“Python网络编程的基础”,因为我对计算机网络感兴趣,并且练习根据我在书中看到的前几个示例程序编写了一些代码..在这种情况下我“写道“一个绑定到本地主机的TCP服务器,一个随机端口和一个连接到本地主机的客户端。客户端为服务器提供一个由2个数字组成的字符串和一个以空格分隔的操作(即'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'
我的问题是:这是最好的方法吗?还是有更好的方法?
谢谢!
答案 0 :(得分:2)
Twisted是关于任何地方提供的最佳网络引擎。它将以友好和友好的代码块处理您想要的一切,这对您的机器来说都是CPU和IO友好的。 http://twistedmatrix.com/trac/
答案 1 :(得分:-1)
展望未来,使用某种网络包而不仅仅依赖于python标准库会更容易。我认为0MQ将是一个很好的起点,它易于使用和学习python绑定,你正在学习的大部分内容仍然适用,并且它快速有效。
最重要的是,它不会将你绑定到应用程序的所有部分的python语言,它不关心传输方法,进程内,进程间,tcp ......
答案 2 :(得分:-1)
我已经将它用于一些小事:http://docs.python.org/library/asynchat.html
正如文档所说,它比ipu绑定服务器更适合于cpu绑定服务器。