Python localhost服务器/客户端网络代码加/减/乘/除两个数字?

时间:2011-02-19 09:07:54

标签: python networking

我最近一直在阅读“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'

我的问题是:这是最好的方法吗?还是有更好的方法?

谢谢!

3 个答案:

答案 0 :(得分:2)

Twisted是关于任何地方提供的最佳网络引擎。它将以友好和友好的代码块处理您想要的一切,这对您的机器来说都是CPU和IO友好的。 http://twistedmatrix.com/trac/

答案 1 :(得分:-1)

展望未来,使用某种网络包而不仅仅依赖于python标准库会更容易。我认为0MQ将是一个很好的起点,它易于使用和学习python绑定,你正在学习的大部分内容仍然适用,并且它快速有效。

最重要的是,它不会将你绑定到应用程序的所有部分的python语言,它不关心传输方法,进程内,进程间,tcp ......

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

答案 2 :(得分:-1)

我已经将它用于一些小事:http://docs.python.org/library/asynchat.html

正如文档所说,它比ipu绑定服务器更适合于cpu绑定服务器。