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

У меня два компьютера, оба подключены к интернету. Я хотел бы передать некоторые основные данные между ними (строки, целые числа, поплавки). Я новичок в сети, поэтому я ищу самый простой способ сделать это. Какие модули я бы посмотрел, чтобы сделать это?

Обе системы будут работать под управлением Windows 7.


person rectangletangle    schedule 11.05.2011    source источник
comment
Просто сделал! Я отдал должное многим людям, которых они заслуживали.   -  person rectangletangle    schedule 12.05.2011
comment
И помог себе получить больше ответов в будущем :) Ты один из немногих, кто на самом деле слушает   -  person Dhaivat Pandya    schedule 14.05.2011


Ответы (3)


Если это не асинхронно (одновременная отправка и получение), вы можете использовать интерфейс сокета.

Если вам нравятся абстракции (или вам нужна поддержка асинхронности), всегда есть Twisted.

Вот пример с интерфейсом сокета (который станет сложнее использовать по мере роста вашей программы, поэтому я бы предложил либо Twisted, либо асинкор)

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. упаковано для вас.

Помните, что сокеты подобны файлам, поэтому они не сильно отличаются для написания кода, поэтому, пока вы можете выполнять базовые файловые операции ввода-вывода и понимать события, программирование сокетов совсем не сложно (пока вы не слишком усложняете, например, мультиплексирование потоков VoIP...)

person Dhaivat Pandya    schedule 11.05.2011

Если вы совершенно не представляете, что такое сокет, вам может быть немного сложно использовать Twisted. А поскольку вам нужно определить тип передаваемых данных, все будет сложнее.

Так что, возможно, версия ICE, Internet Communication Engine, написанная на Python, будет более подходящей, потому что она скрывает много грязных подробностей сетевого программирования. Взгляните на hello world чтобы увидеть, если это делает вашу работу.

person ablmf    schedule 11.05.2011

Посмотрите здесь: Если вы, как я думаю, пытаетесь использовать сокеты, это то, что вы ищете: 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)
person jimbob88    schedule 27.12.2015