我使用的眼动追踪应用程序利用 UDP 发送数据包。我在同一台计算机上制作了一个 python 套接字来监听数据并将其转储到 .txt 文件中。我已经有这么多工作了。
一个单独的应用程序也是用 python 编写的(眼动追踪的对象看到的)正在单独的计算机上运行。因为眼动追踪应用程序是连续的并且会发送不必要的数据,所以到目前为止,我不得不手动解析出对象正在查看所需刺激时的实例。我是根据刺激和眼动追踪应用程序的手动同步启动然后挖掘日志文件来做到这一点的。
我想要做的是让第二台计算机充当第二个 UDP 客户端,每次受试者查看刺激物时(之前将标记插入到 .txt 文件中),都会向眼动追踪计算机上的套接字发送一个数据包提及)。是否可以让一个套接字同时监听两个 IP 地址?
这是我的套接字脚本:
#GT Pocket client program
import datetime
import socket
now = datetime.datetime.now()
filename = 'C:\gazelog_' + now.strftime("%Y_%m_%d_%H_%M") + '.txt'
UDP_IP = '127.0.0.1' # The remote host (in this case our local computer)
UDP_PORT = 6666 # The same port as used by the GT server by default
sock = socket.socket(socket.AF_INET, #internet
socket.SOCK_DGRAM) #UDP
sock.bind( (UDP_IP, UDP_PORT) )
while True:
data, addr = sock.recvfrom( 1024) #I assume buffer size is 1024 bytes.
print "Received Message:", data
with open(filename, "a") as myfile:
myfile.write(str(data + "\n"))
sock.close()
myfile.close()
编辑:
@abarnert我能够绑定到以太网接口上的主机地址并将消息从计算机B发送到计算机A,但是计算机A不再能够从自身接收数据包。当我指定UDP_IP = '0.0.0.0'
计算机 B 不再能够通过以太网发送数据时。当我指定UDP_IP = ''
我收到`error: [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
这与我在计算机 B 上用于发送数据的脚本有关:
import socket
UDP_IP = "169.254.35.231" # this was the host address I was able to send through.
UDP_PORT = 6666
MESSAGE = "Start"
print ("UDP target IP:"), UDP_IP
print ("UDP target port:"), UDP_PORT
print ("message:"), MESSAGE
sock = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT) )
我不知道在哪里(或根本不知道)我需要指定 INADDR_ANY,所以我没有。但我确实尝试过一次import socket.INADDR_ANY
但得到了ImportError: No module named INADDR_ANY
根据您的回复,这似乎是一个简单的问题,所以我不确定我在哪里搞砸了。
EDIT2:我只是再次重读您的答案并理解为什么 socket.INADDR_ANY 不起作用。请忽略我之前编辑的那部分
EDIT3:好的,所以我在指定主机 IP 时没有获取数据的原因是我在计算机 A 上收集数据的应用程序仍被指定为发送到 127.0.0.1。所以我想通了。我仍然很好奇为什么 0.0.0.0 不起作用!