通过互联网传输数据的最简单方法,Python
我有两台电脑,它们都能上网。我想在这两台电脑之间传输一些基本的数据,比如字符串、整数和浮点数。我对网络还不太了解,所以我想找一种最简单的方法来实现这个。请问我应该使用哪些模块来完成这个?
这两台电脑都在运行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流...)