用python在没有internet的机器之间通信

用python在没有internet的机器之间通信,python,communication,python-3.3,Python,Communication,Python 3.3,我正在研究机器之间的进程间通信。目前我有3台笔记本电脑通过集线器连接,没有互联网连接 有没有任何方法可以将此代码改编为在没有Internet的情况下使用类似代码在机器之间发送和接收消息 import socket import sys try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error: print("Failed to create a socket") print("So

我正在研究机器之间的进程间通信。目前我有3台笔记本电脑通过集线器连接,没有互联网连接

有没有任何方法可以将此代码改编为在没有Internet的情况下使用类似代码在机器之间发送和接收消息

import socket
import sys
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
    print("Failed to create a socket")
print("Socket created")
host = ("www.google.com")
port = 80
try:
    remote_ip = socket.gethostbyname(host)
except socket.gaierror:
    print("Hostname could not be found, exiting finding socket")
    sys.exit()
print("Ip adress of",host,"is",remote_ip)
s.connect((remote_ip, port))
print("Socket connected to",host,"on ip", remote_ip)
message = "GET / HTTP/1.1\r\n\r\n"
try:
    s.send(message.encode("utf-8"))
except socket.error:
    print("Failed")
    sys.exit

print("Message send successful")
reply = s.recv(4096)
print(reply)
s.close()

如果机器要通过TCP/IP进行通信(我从代码中的
AF\u INET
中假设),则它们之间需要TCP/IP

好了,你不能用一个简单的集线器。也许有一些黑魔术,但一般来说,至少需要路由器才能在IP级别传输数据


一旦您设置了LAN,为了能够使用主机名,您可以设置DNS,但因为它只有3台机器,只需为每台机器编辑/etc/hosts文件就更容易了。

您可以使用相同的代码,但跳过主机名的DNS查找,并确保“服务器”正在侦听正确的端口

就我个人而言,我会制作一个包装器,或者实现类似于以下答案的东西:


事实上,你没有连接到互联网不是一个问题。确保两台机器都已物理连接并配置为使用相同的网络/网络掩码和可访问的ip地址。您必须手动将此设置为静态,因为没有dhcp(我假定)为您分配此设置。

您不需要internet访问,您只需要在机器之间建立连接(显然您已经建立了连接)。显然,如果没有互联网接入,你将无法连接到谷歌

对于三台机器之间的连接,我建议在其中一台机器上运行服务器程序,在所有机器上运行客户端(除非hub指的是某种服务器,而不是一个插有大量以太网电缆的小东西,在这种情况下,您应该在该机器上运行服务器程序)

我建议您首先学习一些套接字教程,以下是一些我觉得有用的教程:

以及一些简单聊天程序的示例代码:

(最后两个是针对Python2.x的,我假设您没有将
print
作为函数来使用,但它们应该很容易适应)

在某些阶段,您可能会发现发送字符串以外的信息时遇到问题。我知道我已经在这上面呆了很久了,并且试着做一些事情,比如滚动我自己的Python对象编码系统,我只是不明白如何发送一个整数列表,而不是一个整数本身

我通过使用数据的json编码解决了这个问题。这很简单,标准库中有一个模块

然而,尽管您可能会发现简单地使用套接字库进行通信相当容易,但对于更大或可伸缩的项目,您可能希望使用包装器库

我所知道的唯一一件事是,它还不能与Python3.x一起使用


哦,另外,你需要确保你可以连接到其他机器,因为你知道它们的正确IP地址。因此,您要么需要在同一个局域网上,要么创建一个虚拟网络(Hamachi就是其中之一),或者至少为服务器机器提供一个静态IP(端口转发等)。一般来说,为了让服务器运行像minecraft这样的游戏,你必须做一些你需要做的事情。

你可能想查看serverfault以了解与配置相关的问题。是的,您可以创建一个可以通过tcp/ip进行通信的本地网络。我会发现另外两个机器IP的删除查找谷歌IP部分。但是我怎么能发送信息,而其他机器却在听呢。我会运行一个类似的代码来监听响应吗?如果是的话,我的下一个阶段会是什么。我会认为否决票是因为问题明确地说OP不想通过互联网交流。@user2387370哦,我误解了,我以为他们只是指开发阶段。。。谢谢最后一个链接非常有用,谢谢。我所说的集线器是指将三台计算机插入一个集线器,并用三根以太网电缆相互通信。对于下一个问题的简单性,我深表歉意,但是如果我在一台机器上运行发送消息程序,然后在另外两台机器上运行接收消息程序,它应该工作正常吗?