【发布时间】:2017-08-15 05:22:25
【问题描述】:
这不是connection refused 的副本。这个问题询问MacOS 和Windows 之间的区别。另外我的Mac 上的防火墙是关闭的。
我正在尝试通过套接字与设备通信。代码写在python。出于某种原因,如果我在Windows 上运行我的代码,一切正常,但是如果我在Mac 上运行它,它就不行。我的一位同事在C 中编写了相同的代码并在Mac 上运行它并且没有任何问题。有人知道可能是什么问题吗?
如果需要,我可以提供更多详细信息。请让我知道哪些。
编辑
这里是代码
class Device(object):
def __init__(self, ip_addr, port):
self.ip_addr = ip_addr
self.port = port
def say_hi(self):
msg = [254, 49, 0]
ret = self.send_msg(msg)
msg = [254, 29]
return self.send_msg(msg)
def say_bye(self):
msg = [254, 49, 0]
ret = self.send_msg(msg)
msg = [254, 30]
return self.send_msg(msg)
def get_status(self):
msg = [254, 49, 0]
ret = self.send_msg(msg)
msg = [254, 16]
return self.send_msg(msg)
def send_msg(self, msg):
msg = ''.join(chr(i) for i in msg)
s = socket.create_connection((self.ip_addr , self.port))
s.sendall(msg)
ret = s.recv(1)
s.close()
return ord(ret)
这是我得到的错误:
[Errno 61] Connection refused
错误发生在以下行:
s = socket.create_connection((self.ip_addr , self.port))
编辑 2
ip_addr='172.24.176.46', port='2101'
我可以访问该地址。以下是来自ping的结果
$ ping 172.24.176.46
PING 172.24.176.46 (172.24.176.46): 56 data bytes
64 bytes from 172.24.176.46: icmp_seq=0 ttl=64 time=0.495 ms
64 bytes from 172.24.176.46: icmp_seq=1 ttl=64 time=0.398 ms
64 bytes from 172.24.176.46: icmp_seq=2 ttl=64 time=0.452 ms
^C
编辑 3
我找到了一个可以在 Windows 和 Mac 上运行的代码。我将在下面提供它,但本质上我所做的是在类初始化期间创建一个连接(即在__init__ 中)并且不要关闭send_msg 中的连接。这是我的问题:这样做是否安全和适当?不关闭连接似乎不是一个好方法。我将不胜感激。我的新代码如下。
class Device(object):
def __init__(self, ip_addr, port):
self.ip_addr = ip_addr
self.port = port
self.socket = socket.create_connection((self.ip_addr , self.port))
def say_hi(self):
msg = [254, 49, 0]
ret = self.send_msg(msg)
msg = [254, 29]
return self.send_msg(msg)
def say_bye(self):
msg = [254, 49, 0]
ret = self.send_msg(msg)
msg = [254, 30]
return self.send_msg(msg)
def get_status(self):
msg = [254, 49, 0]
ret = self.send_msg(msg)
msg = [254, 16]
return self.send_msg(msg)
def send_msg(self, msg):
msg = ''.join(chr(i) for i in msg)
self.socket.sendall(msg)
ret = self.socket.recv(1)
return ord(ret)
【问题讨论】:
-
您发布的一些代码可能会有所帮助..
-
@abccd 添加了代码。
-
查看这篇文章:connection refused 您很可能只需要禁用 Mac 的防火墙
-
self.ip_addr的值是多少?您的 Mac 是否有权访问该地址? -
@abccd 我的防火墙已关闭,我的问题与stackoverflow.com/questions/12394950/connection-refused 不同。在最近的编辑中提供了我的推理。
标签: python windows macos sockets