我正在开发两个应用程序(一个服务器应用程序和一个客户端应用程序),它们都通过 TCP 端口 7447 相互通信。
服务器应用程序已在运行并且已连接到上述端口:
Prompt>netstat -aon | findstr "7447"
UDP 0.0.0.0:7447 *:* 41316
Prompt>tasklist /FI "PID eq 41316"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
MyServer.exe 41316 Console 1 71.308 K
在客户端应用程序中,我尝试从服务器应用程序接收信息,如下所示:
private void Receive()
{
BaseTelegram telegram = null;
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, this._listenPort);
try
{
Byte[] receivedBytes = this._udpClient.Receive(ref endpoint);
我还知道它已经通过此源代码传递:
public UdpConnection(System.Net.Sockets.UdpClient udpClient, Int32 listenPort)
{
this._listenPort = listenPort;
this._udpClient = udpClient;
}
我知道客户端应用程序正在客户站点上运行,但在我的 PC 上,出现以下异常:
System.InvalidOperationException: 'You must call the Bind method before performing this operation.'
我对如何调整源代码以使其工作不感兴趣(因为代码在客户的场所运行,所以它也应该在我的电脑上运行),我想知道我需要改变哪些配置才能使这个代码运行。
有人有想法吗?
谢谢
如果在构造时不指定端口参数
UdpClient
,则客户端不会绑定到本地端口,您无法调用该Receive
方法。例如:文档中提到了这种行为:
直接的解决办法是在构造的时候指定一个端口参数
UdpClient
(0个也是可以的):Send
另一个隐式的解决方案是在调用方法之前调用该Receive
方法,这是因为底层服务提供者将分配最合适的本地网络地址和端口号。