通过Internet传输数据的最简单方法,Python

时间:2011-05-11 22:56:25

标签: python networking data-transfer

我有两台电脑,都连接到互联网。我想在它们之间传输一些基本数据(字符串,整数,浮点数)。我是网络新手,所以我正在寻找最简单的方法。我会在做什么模块来做这件事?

两个系统都将运行Windows 7。

3 个答案:

答案 0 :(得分:5)

只要不是异步(一次发送和接收),您就可以使用the socket interface

如果你喜欢抽象(或需要异步支持),总会有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已经为您准备好了。

请记住,套接字就像文件一样,所以编写代码并没有太大的不同,因此,只要你能做基本的文件io,并了解事件,套接字编程就不那么难了(只要你不像复用VoIP流那么复杂......)

答案 1 :(得分:1)

如果你完全不知道什么是套接字,那么使用Twisted可能有点困难。而且,由于您需要确定所传输数据的类型,因此事情会变得更加困难。

因此,ICE, the Internet Communication Engine的python版本可能更适合,因为它隐藏了许多网络编程的脏细节。看一下hello world,看看它是否能奏效。

答案 2 :(得分:0)

看这里: 如果您,我认为您正在尝试使用套接字,那么您正在寻找: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)