通过互联网传输数据的最简单方法,Python

13 投票
3 回答
20774 浏览
提问于 2025-04-16 17:28

我有两台电脑,它们都能上网。我想在这两台电脑之间传输一些基本的数据,比如字符串、整数和浮点数。我对网络还不太了解,所以我想找一种最简单的方法来实现这个。请问我应该使用哪些模块来完成这个?

这两台电脑都在运行Windows 7。

3 个回答

0

看看这里:
如果你像我想的那样,正在尝试使用套接字(sockets),那么你可以参考这个链接: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)
1

如果你对“套接字”完全没有概念,那么使用Twisted可能会有点困难。而且因为你需要识别正在传输的数据类型,这样事情就会变得更复杂。

所以,也许Python版本的ICE(互联网通信引擎)会更适合你,因为它隐藏了很多网络编程中的复杂细节。你可以看看hello world示例,看看它是否能满足你的需求。

7

只要不是异步的(也就是同时发送和接收),你可以使用套接字接口

如果你喜欢更简单的抽象(或者需要异步支持),那就可以考虑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流...)

撰写回答