#python #networking #data-transfer
#python #сеть #передача данных
Вопрос:
У меня есть два компьютера, оба подключены к Интернету. Я хотел бы перенести некоторые базовые данные между ними (строки, целые числа, значения с плавающей точкой). Я новичок в работе с сетями, поэтому я ищу самый простой способ сделать это. Какие модули я бы рассматривал для этого?
Обе системы будут работать под управлением Windows 7.
Комментарии:
1. Только что сделал! Я отдал многим людям должное, которого они заслуживали.
2. И, помогли себе получить больше ответов в будущем 🙂 Вы один из немногих, кто действительно слушает
Ответ №1:
Пока это не асинхронно (одновременная отправка и получение), вы можете использовать интерфейс сокета.
Если вам нравятся абстракции (или нужна асинхронная поддержка), всегда есть Twisted.
Вот пример с интерфейсом сокета (который будет сложнее использовать по мере увеличения размера вашей программы, поэтому я бы предложил либо Twisted, либо asyncore)
import socket
def mysend(sock, msg):
totalsent = 0
while totalsent < MSGLEN:
sent = sock.send(msg[totalsent:])
if sent == 0:
raise RuntimeError("socket connection broken")
totalsent = totalsent sent
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("where ever you have your other computer", "port number"))
i = 2
mysend(s, str(i))
Документация по python превосходна, я взял оттуда функцию mysend ().
Если вы выполняете работу, связанную с вычислениями, ознакомьтесь с XML-RPC, который python прекрасно упаковал для вас.
Помните, сокеты похожи на файлы, поэтому они не сильно отличаются для написания кода, поэтому, пока вы можете выполнять базовый ввод-вывод файлов и понимать события, программирование сокетов совсем не сложно (если вы не слишком усложняетесь, например, мультиплексирование потоков VoIP …)
Ответ №2:
Если вы совершенно не представляете, что такое socket, использовать Twisted может быть немного сложно. И поскольку вам нужно определить тип передаваемых данных, все будет сложнее.
Так что, возможно, версия python для ICE, механизма интернет-коммуникаций, будет более подходящей, потому что она скрывает множество грязных деталей сетевого программирования. Взгляните на hello world, чтобы увидеть, выполняет ли он вашу работу.
Ответ №3:
Посмотрите сюда: если вы, как я думаю, пытаетесь использовать сокеты, это то, что вы ищете:https://docs.python.org/2/howto/sockets.html
Я надеюсь, что это поможет, поскольку у меня это хорошо сработало. или добавьте этот класс для постоянного подключения:
class mysocket:
'''demonstration class only
- coded for clarity, not efficiency
'''
def __init__(self, sock=None):
if sock is None:
self.sock = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
else:
self.sock = sock
def connect(self, host, port):
self.sock.connect((host, port))
def mysend(self, msg):
totalsent = 0
while totalsent < MSGLEN:
sent = self.sock.send(msg[totalsent:])
if sent == 0:
raise RuntimeError("socket connection broken")
totalsent = totalsent sent
def myreceive(self):
chunks = []
bytes_recd = 0
while bytes_recd < MSGLEN:
chunk = self.sock.recv(min(MSGLEN - bytes_recd, 2048))
if chunk == '':
raise RuntimeError("socket connection broken")
chunks.append(chunk)
bytes_recd = bytes_recd len(chunk)
return ''.join(chunks)