Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发送UDP消息有效,在Unity3d上接收not-C_C#_Sockets_Unity3d_Udp - Fatal编程技术网

C# 发送UDP消息有效,在Unity3d上接收not-C

C# 发送UDP消息有效,在Unity3d上接收not-C,c#,sockets,unity3d,udp,C#,Sockets,Unity3d,Udp,你好, 我正在尝试在Unity3d中设置UDP连接,在过去几天中它给了我一些帮助: 我正在运行的Unity脚本应该能够接收并可能在将来发送UDP消息。 在Unity旁边,我使用Wireshark跟踪数据包并生成和接收UDP消息 消息的来源是一个PLC,它每秒发送一个包,包含两个浮点8字节,用于测试。 PLC IP为192.168.0.1,通过以太网直接连接到运行Unity的笔记本电脑。没有交换机,就没有路由器 我的以太网端口具有IP 192.168.0.41,消息通过端口8052传入 我可以通过

你好,

我正在尝试在Unity3d中设置UDP连接,在过去几天中它给了我一些帮助:

我正在运行的Unity脚本应该能够接收并可能在将来发送UDP消息。 在Unity旁边,我使用Wireshark跟踪数据包并生成和接收UDP消息

消息的来源是一个PLC,它每秒发送一个包,包含两个浮点8字节,用于测试。 PLC IP为192.168.0.1,通过以太网直接连接到运行Unity的笔记本电脑。没有交换机,就没有路由器

我的以太网端口具有IP 192.168.0.41,消息通过端口8052传入

我可以通过以下方式在Wireshark中看到:

从PLC到Unity的包裹 从Unity到PLC的包裹 包具有预期的结构 我可以在PacketSender中看到/执行的操作:

通过端口8052从PLC到达的包裹 向Wireshark中可见的PLC发送消息 通过在这里接收包,可以安全地说防火墙端口窗口可以正常工作。 如果我已启动Unity接收脚本,则无法使用PacketSender接收包。。。 。。。这应该是一个指示器,表明Unity UDP套接字已启动并正在运行,有望吞咽消息。 如果我调用netstat-aon,我可以在预期的端口&IP; 0.0.0.0:8052或192.168.0.41:8052,具体取决于其创建方式。我还可以看到没有其他进程使用相同的端口

但不起作用的是实际接收并使用Unity脚本中的数据

工作原理是从另一个Unity脚本接收通过本地IP 127.0.0.1发送的数据

到目前为止,我已经尝试了几种创建套接字的方法:

var udpClient=new UdpClient8052,AddressFamily.InterNetwork var udpClient=新的UdpClient8052 UdpClient UdpClient=新的UdpClient8052,AddressFamily.InterNetwork var udpClient=new socketaddress family.InterNetwork,SocketType.Dgram,ProtocolType.Udp; 我试过

…接收同步或非同步消息 …在主线程或后台线程中运行接收循环 …打开/禁用客户端的阻止 …将客户端绑定到IP或保留在IP地址上。任何 …关闭我在以太网端口上的HyperV交换机仍然关闭 …打开防火墙中的相关端口 …重新启动笔记本电脑 …关于我在任何论坛上都能找到的每个解决方案。 感觉C套接字和Step7套接字使用不同的UDP,或者C套接字在接收端未按预期工作。 软件包实际上就在插座的门口,它忽略了它

安装规格: PLC:CPU315-2 PN/DP 笔记本电脑:Dell Latitude、i5、8GB RAM、Win10 Enterprise、64位 统一:统一2017.3.1f1,唯一的资产是组织核心

当前测试代码:

我知道代码中缺少注释,但正如您可能猜到的,代码最近发生了很大变化


谢谢你的帮助。

因此,在经历了一段非常令人沮丧的旅程后,我找到了一份不好的工作,但却能胜任:

我编写了一个python脚本,它打开一个套接字,接收外部数据并通过本地IP将其转发给Unity。这就行了

代码如下:

# Import libraies
import socket
import time

# Set send IP adress and port
UDP_IP = "127.0.0.1"
UDP_PORT_Rec = 8052
UDP_PORT_Unity = 8055

print("Receiving on Port:" + str(UDP_PORT_Rec))
print("Sending to IP:" + UDP_IP + ":" + str(UDP_PORT_Unity))

# Set socket to send udp messages and bind port
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(('',UDP_PORT_Rec));

## Keep sending message from file location
while True:
    data, addr = sock.recvfrom(1024) #buffer size, hopefully no problem if too big
    print("Received")

    sock.sendto(data, (UDP_IP, UDP_PORT_Unity))
    print("Send")
对您的故障排除有用的工具:

安装它可能是跟踪互联网流量的最佳工具。Wireshark中可见的包对于普通应用程序可能不可见! 用于生成和接收流量。应用程序使用一种基本的方法来接收包——如果可以,那么您的程序也应该能够接收包。 如果套接字正在运行,请与netstat-aon联系。 完成:检查防火墙设置。
如果您想从外部源接收,您需要允许Unity on firewall或禁用firewall。防火墙阻止unity editor与外部源的连接,这就是为什么您可以发送数据但不能接收数据。如果您构建了您的项目,您的代码将正常工作,因为它将在第一次运行时询问您


在Unity Discord网络频道上,一位用户评论说Unity编辑器只监听本地主机127.0.0.1,只有构建项目连接到外部源。事实证明,这对我来说是正确的——我的连接在构建中确实有效。
# Import libraies
import socket
import time

# Set send IP adress and port
UDP_IP = "127.0.0.1"
UDP_PORT_Rec = 8052
UDP_PORT_Unity = 8055

print("Receiving on Port:" + str(UDP_PORT_Rec))
print("Sending to IP:" + UDP_IP + ":" + str(UDP_PORT_Unity))

# Set socket to send udp messages and bind port
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(('',UDP_PORT_Rec));

## Keep sending message from file location
while True:
    data, addr = sock.recvfrom(1024) #buffer size, hopefully no problem if too big
    print("Received")

    sock.sendto(data, (UDP_IP, UDP_PORT_Unity))
    print("Send")