tcplistener 没有启动

Posted

技术标签:

【中文标题】tcplistener 没有启动【英文标题】:tcplistener does not start 【发布时间】:2011-10-17 15:11:06 【问题描述】:

我在 Windows 窗体应用程序中使用 TcpListener;它有一个“开始”按钮,用于启动TcpListener。但是,当我单击开始按钮时,会引发以下异常:

请求的地址在其上下文中无效

这是我用来启动监听器的代码:

IPAddress FriendIp = IPAddress.Parse(IpAddress);
server = new TcpListener(FriendIp, PortNum);
server.Start();

这是异常的调用堆栈:

System.dll!System.Net.Sockets.Socket.DoBind(System.Net.EndPoint endPointSnapshot, System.Net.SocketAddress socketAddress) + 0x9f bytes  
System.dll!System.Net.Sockets.Socket.Bind(System.Net.EndPoint localEP) + 0xd2 bytes 
System.dll!System.Net.Sockets.TcpListener.Start(int backlog) + 0x91 bytes   
System.dll!System.Net.Sockets.TcpListener.Start() + 0xa bytes   

BlueBall.exe!BlueBall.Chat_Window.Chat_Window(string ipadd, int port, bool serverclientjob) 第 46 行 + 0x10 字节 C# BlueBall.exe!BlueBall.BlueBall.Main_ListBox_DoubleClick(object sender, System.EventArgs e) Line 221 + 0x29 bytes C# System.Windows.Forms.dll!System.Windows.Forms.Control.OnDoubleClick(System.EventArgs e) + 0x7f 字节 System.Windows.Forms.dll!System.Windows.Forms.ListBox.WndProc(ref System.Windows.Forms.Message m) + 0x2c9 字节 System.Windows.Forms.dll!System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message m) + 0x13 字节 System.Windows.Forms.dll!System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message m) + 0x31 字节 System.Windows.Forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallback(System.IntPtr hWnd, int msg, System.IntPtr wparam, System.IntPtr lparam) + 0x64 字节 [本机到托管转换] [托管到本地转换] System.Windows.Forms.dll!System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(System.IntPtr dwComponentID, int reason, int pvLoopData) + 0x287 bytes System.Windows.Forms.dll!System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(int reason, System.Windows.Forms.ApplicationContext context) + 0x16c 字节 System.Windows.Forms.dll!System.Windows.Forms.Application.ThreadContext.RunMessageLoop(int reason, System.Windows.Forms.ApplicationContext context) + 0x61 bytes System.Windows.Forms.dll!System.Windows.Forms.Application.Run(System.Windows.Forms.Form mainForm) + 0x31 字节 BlueBall.exe!BlueBall.Program.Main() 第 18 行 + 0x1d 字节 C# [本机到托管转换] [托管到本地转换] mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x6d 字节 Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() + 0x2a 字节 mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(对象状态)+ 0x63 字节 mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback 回调, 对象状态, bool ignoreSyncCtx) + 0xb0 bytes mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback 回调, 对象状态) + 0x2c 字节 mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 字节 [本机到托管转换]

【问题讨论】:

传递给 TcpListener 的地址不是远程地址,而是本地地址。 不,这是远程地址,我仔细检查了。 或者,我可以说..它是我电脑上虚拟机的地址。 @JasimKhanAfridi 不,我不是说你传递的地址是本地地址,问题是它期望本地地址,但你给它一个远程地址. @JasimKhanAfridi 我可以看到这个问题付出了很多努力;但是,如果您想避免未来的反对票,请避免“电话发言”——这个社区确实不受欢迎。不懂英文也好,但“Plz”不是一个词。 【参考方案1】:

Harold 和 Spender 是正确的,TcpListener 只能绑定到实例化机器上的本地 IP 地址。

【讨论】:

以上是关于tcplistener 没有启动的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 中的线程上传播 tcplistener 传入连接?

TcpListener 类

C#里TcpListener的阻塞式服务器

C#里TcpListener的阻塞式服务器

C#里TcpListener的阻塞式服务器

使用 async/await 的异步 TcpListener 的正确方法