我的情景是:
有两台不同机器上运行着两个软件,一个作为服务器,一个作为客户端。它们都使用相同的UDP端口进行通信。(由于客户端硬件的限制,无法将通信设置在TCP层面上(内存受限))。这种情况已经持续了15年。
现在我想为这个客户端制作一个仿真器,这样我就不必每次需要调试和故障排除时都要重新配置客户端。而且它不在我所在的位置。
我做的事情是,在虚拟网络卡上创建了一个具有监听端口和发送端口(与服务器相同)的简单客户端应用程序(使用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
客户端没有在与服务器相同的网络卡上进行监听(但它们都在同一台计算机上运行)。我不明白的是为什么会出现这种消息?也许不能在同一台计算机上创建虚拟网络卡并使用相同的端口吗?(因为我想在同一台计算机上运行客户端和服务器)。
[编辑]
![设置情景图](https://istack.dev59.com/Rv9T3.webp)
我只是想知道,可能的原因之一是它正在为所有网络卡使用一个端口列表,因此已经被使用。那么我的问题是:“如何创建第二个要监听的端口列表(因为它是同一台计算机上的不同网络卡)?”这几乎与VirtualBox或VirtualPC创建新的虚拟网络卡相同。当它们被创建时,可以在同一端口上进行监听(尽管它是虚拟机),但仍然是同一硬件。那么问题是他们是如何做到的?
UdpClient listener = new UdpClient(listenPort); IPEndPoint groupEP = new IPEndPoint(IPAddress.Parse("192.168.0.3"), listenPort);
。但是它在第一行就已经出现了错误。我尝试了另一种方式,但仍然在第二行出错。 - DForce