Самый простой способ передачи данных через Интернет, Python

#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)