这是我的python modbus tcp通信代码,它在这条线路上等待,然后停止连接,这是我的错误:
sock.connect((TCP_IP, TCP_PORT))
(如果我使用从程序也不工作)在我的客户端,我使用这个代码:
TCP_IP='10.0.2.15'
TCP_PORT=502
BUFFER_SIZE=39
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((TCP_IP,TCP_PORT))
这是主控端:
# Create a TCP/IP socket
TCP_IP = '10.0.2.2'
TCP_PORT = 502
BUFFER_SIZE = 39
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((TCP_IP, TCP_PORT))
try:
unitId = 16 # Plug Socket11
functionCode = 3 # Write coil
print("\nSwitching Plug ON...")
coilId = 1
req = struct.pack('12B', 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, int(unitId), 0x03, 0xff, 0xc0, 0x00,
0x00)
sock.send(req)
print("TX: (%s)" % req)
rec = sock.recv(BUFFER_SIZE)
print("RX: (%s)" % rec)
time.sleep(2)
print("\nSwitching Plug OFF...")
coilId = 2
req = struct.pack('12B', 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, int(unitId), 0x03, 0xff, 0xc0, 0x00,
0x00)
sock.send(req)
print("TX: (%s)" % req)
rec = sock.recv(BUFFER_SIZE)
print("RX: (%s)" % rec)
time.sleep(2)
finally:
print('\nCLOSING SOCKET')
sock.close()
我想你的问题是“为什么sock.connect()调用挂起?”。这是因为默认情况下,它无限期地等待连接。换句话说,调用在默认情况下是“阻塞”的。如果要等待连接最多500毫秒,则需要指定以下内容:
sock.connect(.5) #wait 500 milliseconds for a connection attempt
另外,请参阅Python套接字连接超时
我认为你的问题是IP地址:10.0.2.2
如这里所述[连接到LocalHost/10.0.2.2从Android模拟器超时。您可以将'10.0.2.2'
替换为'localhost'
或尝试查找您的IPv4
地址。
要执行此操作,请在命令提示符下键入ifconfig(如果使用Linux),或在windows中键入ipconfig并搜索IPv4
地址。
我使用了一个简单的客户机-服务器示例来运行您的代码,并将'10.0.2.2'
替换为'localhost'
,一切都很顺利。
服务器端:
import socket
import struct
import time
TCP_IP = 'localhost'
TCP_PORT = 502
BUFFER_SIZE = 39
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
sock, addr = s.accept()
print 'Connected by', addr
try:
unitId = 16 # Plug Socket11
functionCode = 3 # Write coil
print("\nSwitching Plug ON...")
coilId = 1
req = struct.pack('12B', 0x00, 0x01, 0x00, 0x00, 0x00, 0x06,
int(unitId), 0x03, 0xff, 0xc0, 0x00,
0x00)
while 1:
sock.send(req)
print("TX: (%s)" % repr(req))
rec = sock.recv(BUFFER_SIZE)
print("RX: (%s)" % repr(rec))
time.sleep(2)
break
print("\nSwitching Plug OFF...")
coilId = 2
req = struct.pack('12B', 0x00, 0x01, 0x00, 0x00, 0x00, 0x06,
int(unitId),
0x03, 0xff, 0xc0, 0x00,
0x00)
while 1:
sock.send(req)
print("TX: (%s)" % repr(req))
rec = sock.recv(BUFFER_SIZE)
print("RX: (%s)" % repr(rec))
time.sleep(2)
break
finally:
sock.close()
客户端:
import socket
TCP_IP = 'localhost'
TCP_PORT = 502
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((TCP_IP, TCP_PORT))
data = sock.recv(1024)
print repr(data)
while 1:
sock.send(data)
print("send back to server: (%s)" % repr(data))
break
data = sock.recv(1024)
print repr(data)
while 1:
sock.send(data)
print("send back to server: (%s)" % repr(data))
break
sock.close()
确保在单独的文件/终端中运行服务器和客户端
我想用AWS Lambda函数实现基本的TCP/IP协议。如果我们把客户机看作一个AWS lambda函数,把服务器看作另一个AWS lambda函数(不确定我们是否可以把客户机和服务器看作是lambda函数),我们是否可以用TCP/IP协议在这两个lambda函数之间建立客户机-服务器通信(这不同于从一个lambda函数调用另一个lambda函数)。我还想知道用java编写的客户机或服务器端套接
问题内容: 我要通过TCP / IP编写程序,我应该通过客户端或服务器发送对象,当我想发送或接收字符串但尝试读取对象时,它是正确的: 我收到一个例外: 它指的是这一行: 这是我的服务器代码: 客户端代码: 谁能解释我发生了什么,这个例外是什么,为什么我收到这个例外? 问题答案: 只是摆脱发送和接收布尔值的麻烦。这是多余的。如果在创建连接时遇到问题,则不会创建套接字:而是抛出异常。您会将所有内容与同
问题内容: 是否可以使用 socat 实用程序在类似ttyS0的串行(调制解调器)设备上获得双向IP隧道?我尝试使用TUN选项,但仍然无法获得结果。 任何建议,欢迎:) 更新: PC1: PC2: 在那之后,我看到tun0接口的两端都有正确的地址,但是我无法彼此ping通。取而代之的是,当我使用远程进程出口发送数据时,tun0设备被破坏了。有什么建议么?.. 更新2: 当我们尝试仅使用socat通
我的一个项目出了问题。我有一个raspberry pi连接到网络摄像头,但我发现这对RPI来说是太多的负载。这就是为什么我决定购买和使用IP摄像头。但唯一的问题是,IP摄像机在它应该放置的地方没有得到wifi接收,但我有一个强大的定向天线,我可以连接到RPI。我要RPI路由互联网流量从摄像头插入以太网,通过WiFi。我不是百分之百确定如何做到这一点,但到目前为止,我已经给予wifi优先于以太网,并
问题内容: 我的任务是对詹金斯的一些工作进行健康检查。这个想法是通过Jenkins rest API获取作业的状态和关联的IP地址,因此我可以使用该信息与另一个Restful API进行接口。我创建了一个Groovy脚本,该脚本成功解析了Jenkins作业并获取了它们的状态(无论它们是否正在运行),但是我还没有找到一种将这些作业与其IP地址关联的方法。有没有办法通过其余的API获取Jenkins中
我对许多AJAX调用运行安全检查,以查看是否有记录在案的相同IP请求。 我使用了以下一组类函数来建立IP(可以通过负载平衡器来实现,因此采用了纵向方法)。 问题是,我的用户通过代理进行操作时遇到了问题。有人能说明原因吗?我已经使用基本免费代理的在线尝试和模拟,但它似乎没有得到可变IP或任何东西-所以我不知道为什么这会说这两个IP不匹配。