C# 我可以将WebSocket用于桌面应用程序吗?

C# 我可以将WebSocket用于桌面应用程序吗?,c#,websocket,C#,Websocket,就这样。这可能是个新手问题。由于NAT和防火墙问题,我几乎放弃使用TcpClient/Listener。我想知道是否还有其他选择。端口80可能不需要处理这些烦人的事情。我希望答案是肯定的。那么over-WebCockets呢是的,您可以在非浏览器应用程序中实现WebSockets,但它不会解决您的问题 当你试图打开一个服务器监听websocket连接时,你会遇到与你创建一个普通套接字连接时遇到的问题相同的问题:个人防火墙解决方案会阻碍你,并且不是每个路由器都会转发你选择的端口。使用著名的端口80

就这样。这可能是个新手问题。由于NAT和防火墙问题,我几乎放弃使用TcpClient/Listener。我想知道是否还有其他选择。端口80可能不需要处理这些烦人的事情。我希望答案是肯定的。

那么over-WebCockets呢

是的,您可以在非浏览器应用程序中实现WebSockets,但它不会解决您的问题

当你试图打开一个服务器监听websocket连接时,你会遇到与你创建一个普通套接字连接时遇到的问题相同的问题:个人防火墙解决方案会阻碍你,并且不是每个路由器都会转发你选择的端口。使用著名的端口80在这里对您没有帮助。对于普通用户来说,在其NAT路由器后面运行Web服务器是很少见的,因此默认情况下,任何NAT路由器都不会转发端口,除非专门配置为转发端口

NAT路由器通常会阻止其背后的任何主机充当服务器,除非配置为允许。当您希望用户不担心NAT配置时,两个用户都必须充当客户端。唯一的方法是让所有玩家都连接到一个中央服务器


虽然托管服务器仍然不是免费的,但它已经变得相当便宜,因为基于云的主机将以非常低廉的价格向您租用小型虚拟服务器。从中获得的最小实例仅需每小时2美分或每月14.40美元。或者,您可以使用一些备件构建自己的服务器,并将其托管在您自己的internet连接上。当您没有静态IP地址时,您可以使用动态名称服务器服务,如或。

是的,您可以,但请不要。 我建议更改您的体系结构:


使用服务器套接字作为处理客户端的主要点。此服务器必须具有可见的IP/端口。在这种情况下,您可能会有客户支持nuts,不必麻烦。

我从未听说过它,但在快速搜索之后,我认为这是一个开源的第三方库/项目,对吗?我可以将其用于桌面应用程序吗?它能解决我所有的NAT和防火墙问题吗?我们不知道你的“NAT和防火墙问题”是什么。@spender哦,显然,使用UPnP进行端口映射不是一门精确的科学。有些路由器在您请求它们的静态映射集合时返回null,以便您可以添加自己的集合,即使它们启用了UPnP,它们也没有相应的操作。关于防火墙,其中一些防火墙,比如我的McAfee,会在没有询问的情况下无声地阻止客户端连接到TcpListener(我必须检查防火墙历史记录以知道连接被阻止)。我知道有一种方法可以通过代码向Windows防火墙添加规则,但我想要一种更通用的解决方案我已经关闭了UPNP,因为我不喜欢应用程序打开我不知道的端口。我并不孤单。这可能是真的,但当路由器将其静态端口映射集合返回为null时,此特定测试并非如此。UPnP当然是开着的。我使用了一个软件来探索路由器的UPnP操作,但它没有必要以编程方式添加端口映射。你用什么来编写桌面应用程序?Winforms?WPF?此外,您还可以使用TcpClient和TcpListenerI选择所需的端口使用WPF。我知道港口的事。我没有提到它,因为直到现在我还不知道你可以选择不选择端口。但我一直认为,如果我选择为http协议保留的端口来发送原始二进制数据,这将是一种糟糕的编程实践,或者干脆失败。这样行吗?它能解决我的NAT和防火墙问题吗?你想做什么?编写桌面服务器或客户端?区别是非常重要的。它可能会起作用,正如你所说,这是一种不好的做法。您应该关注您的网络问题,而不是寻找另一个库,因为无论您使用什么库,问题都将保持不变。你不能为你的应用程序选择一个端口,然后在防火墙中对其进行授权,并在路由器中添加适当的设置吗?两者都可以。这应该是一个井字游戏,这是我作为一个游戏程序员的第一次体验,而且它被证明是非常令人沮丧的。其思想如下:一台计算机将承载一台客户机和一台服务器。此计算机中的客户端将连接到此计算机中的服务器。另一个人在internet上其他地方的计算机将运行一个客户端,该客户端将连接到远程服务器。然后,由服务器中介的两个客户端将玩游戏我想实现您所说的解决方案假设我配置了一个带有dyndns或没有ip的Web服务器,如何将客户端相互连接,有没有一种方法可以让他们不用通过服务器直接使用websocket进行连接?@MehdiKaramosly我想我已经清楚地解释了为什么需要一台中央服务器。当您有多个客户端连接到您的服务器并希望它们相互通信时,您只需收听它们的消息并将其转发到正确的其他连接。感谢您提供的信息,但我想知道的是,是否可以通过服务器启动连接,然后两个对等方将直接连接而不通过服务器,这似乎是不可能的。谢谢