Недавно я читал «Основы сетевого программирования на 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'
Мой вопрос: это лучший способ сделать это или есть лучший способ?
Спасибо!