3

我的场景是:

有两种软件在两台不同的机器上运行,一台作为服务器,一台作为客户端。它们都使用相同的端口在 UDP 级别上相互通信。(由于客户端硬件,无法在 TCP 级别设置通信(内存有限))。这种情况现在已经有 15 年的时间了。

现在我想为这个客户端制作一个模拟器,这样我就不必使用客户端了(因为每次我需要调试和排除故障时都需要重新配置它)。而且它与我所在的位置不同。

我所做的是在虚拟网卡(使用 de devcon 实用程序创建)上制作了一个简单的客户端应用程序,其中包含侦听器端口和发送器端口(与服务器相同)

现在,当我运行客户端时,我得到一个 SocketException:“每个套接字地址(协议/网络地址/端口)通常只允许使用一次”(这是我启动客户端时发生的第一件事)

这发生在我创建侦听器的行:UdpClient listener = new UdpClient(listenPort);

在 osi 模型中,首先是网络层(IP 地址),然后是端口号(带有 TCP/UDP 层)。

7   Application     Process Application     
6   Presentation
5   Session
4   Transport       Host to host          TCP, UDP  Packets
3   Network         Internet              IP, ICMP  Frames
2   Data Link       Network Access        ARP       Bits
1   Physical 

客户端没有在与服务器相同的网卡上监听(但它们都在同一台计算机上运行)。

我不明白的是为什么这个消息?可能是不可能创建虚拟网卡并在同一台计算机上使用相同的端口?(因为我想在同一台计算机上运行客户端和服务器)

[编辑] 设置场景

我只是想知道这可能是不可能的,因为它为所有网卡使用一个端口列表,因此它已经被使用了。然后我的问题是:“如何制作第二个要监听的端口列表(因为它是同一台计算机中的不同网卡?”

几乎和VirtualBox 或VirtualPC 做一个新的虚拟网卡一样。创建它们时,可以在同一个端口上侦听(尽管它是虚拟机),但仍然是相同的硬件。那么问题来了,他们是怎么做到的?

[/编辑]

4

3 回答 3

0
  1. 您可以在虚拟机中运行/调试。
  2. 你可以买便宜的(

至于添加第二个虚拟网络适配器,我从未见过在您的机器上伪造另一张卡的程序。

于 2012-10-10T09:59:49.763 回答
0

创建新的 UdpClient() 时指定 0 作为端口号

var clt = new UdpClient(0);

根据 MSDN 上的文档,底层提供商会分配一个免费的端口号,而不会发生冲突。

您的软件是用于测试机器人的模拟器。对我来说,没有必要为此遵循客户端硬件的规范。

于 2012-10-10T12:31:17.960 回答
0

我已经解决了我的问题!我上述想法的理论有效。

我发现我的前任已经在当前计算机中所有可用的网卡上设置了一个 UdpPortListener....

 IPEndPoint(IPAddress.Any, receivePort);

我已经在我想听的网卡上设置了它,它可以工作!这里的结论是,永远不要对某人如何实现代码(即使它在纸上说的)做出假设,并且总是尝试对事情的实际处理方式进行一些“逆向工程”!

谢谢大家在这里帮助我!

于 2012-10-18T12:52:31.183 回答