Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 服务器和客户端之间的双向通信_C#_Asp.net_Wcf_Sockets_Networking - Fatal编程技术网

C# 服务器和客户端之间的双向通信

C# 服务器和客户端之间的双向通信,c#,asp.net,wcf,sockets,networking,C#,Asp.net,Wcf,Sockets,Networking,情况:我们有一个web应用程序在服务器上运行。此应用程序需要从位于不同网络上的其他PC(客户端)获取数据 在客户端的pc上,有WCF托管在Windows服务中使用其本地sqldb。我想在服务器和客户端之间进行双工通信,以便彼此共享数据。 数据共享是指在客户端和服务器之间共享数据表、数据集、字符串等 问题: 1)我无法控制客户端PC上的防火墙、代理、NAT。大多数公司员工PC具有大量网络安全功能,例如防火墙阻止ICMP流量和一些端口,一些路由器可能禁用端口转发等,客户端可以更改网络位置。 不过,我

情况:我们有一个web应用程序在服务器上运行。此应用程序需要从位于不同网络上的其他PC(客户端)获取数据

在客户端的pc上,有
WCF
托管在
Windows服务中
使用其本地
sqldb
。我想在服务器和客户端之间进行双工通信,以便彼此共享数据。 数据共享是指在客户端和服务器之间共享数据表、数据集、字符串等

问题

1)我无法控制客户端PC上的防火墙、代理、NAT。大多数公司员工PC具有大量网络安全功能,例如防火墙阻止ICMP流量和一些端口,一些路由器可能禁用端口转发等,客户端可以更改网络位置。 不过,我不想在客户端路由器、代理和防火墙上做任何设置。 在沟通过程中,我如何处理这类客户方的问题? 正如你所知,skype在这种情况下工作得非常好

防火墙通常会阻止到客户端的入站连接;客户端可能无法从服务器访问,它可能在路由器后面使用NAT转换,因此在路由器上未设置端口转发和某些新路由器禁用端口转发的情况下无法联系

2)客户端没有IIS

我不想在客户端PC上允许远程访问

有100多个客户端,只有一台服务器。一台服务器需要与不同网络上的多个客户端通信

3)我的客户端应用程序一边使用Windows应用程序和托管在Windows服务中的wcf,另一边在我的服务器上使用Web应用程序。所以它的意思是桌面pc和网络pc之间的通信,这就是问题所在

如果两者都使用web应用程序,那么进行双工通信就不是问题了。因为我知道WEBRTC适合这里

我已经测试并发现问题的技术

WSDualHttpBinding:如果客户端在NAT后面,则不工作。查看此项了解详细信息

MSMQ:如果客户端超过1个,那么它的技术就不好,性能问题也是因为它使用RAM内存。检查这里

Xsocket:如果客户端上的ICMP流量被防火墙阻止,它也不起作用。检查这里

WebRTC:它的工作很好,但它支持web到web的通信。作为我的客户端,我有win应用程序

Socket.io:它需要设置node.js和许多其他东西,很难实现,因为我需要在现有的应用程序上实现,我不是在开发新的应用程序

C#Socket程序:如果客户端支持NAT,它将无法工作。请检查此处

服务总线继电器:即使用于测试也不免费

socketPro:我研究过,我发现它很好,但我在谷歌上找不到任何合适的样本。所以我可以测试一下

正版频道:我在谷歌上找不到任何样本

让我们看看信号器问题。服务器端我运行一个控制台应用程序,客户端我运行两个应用程序,一个是控制台,另一个是web应用程序。当我运行控制台客户端应用程序时,它并没有启动和服务器的连接,但当我使用web客户端应用程序时,它工作正常。 示例链接在这里 我不明白为什么会这样


请告诉我处理这种情况最安全、最快捷的方法是什么?我应该使用什么方法?

< p>我在空余时间使用套接字(当然是C++,不是C语言但是不应该有区别),而且我从来没有一个问题,连接到防火墙/路由器后面的客户端,即使没有端口转发。p> 路由器和防火墙通常不喜欢类似服务器的程序,例如将套接字绑定到端口号的程序。您的客户是否做了与绑定相关的事情?因为它不应该

不用说,我建议使用套接字程序。在我看来,这是最灵活的方式

似乎适合此解决方案,因为它很灵活。 它谈判的最快可用的沟通渠道,这是你正在寻找的


你应该调查一下它的问题,信号器最终会工作。

我正在广泛使用信号器在服务器(C#)之间、服务器和移动应用程序(C#、Xamarin、iOS、Android)之间进行通信。服务器位于不同的位置,移动应用程序可以在任何地方。这一切都非常可靠


看一看:这里

如果客户端和服务器在不同的网络上,socket编程就不起作用了。只有当两者都在局域网上时,socket编程才起作用。或者两者都在实时IP上。您知道,如果路由器后面的客户端没有静态IP,则其IP始终会更改。只有服务器在路由器后面时需要转发其端口,如果在防火墙后面则需要打开端口。否则,我们所有的日常应用程序将如何工作?Skype、Messenger甚至网络浏览器。基本上,客户端连接到服务器。建立连接后,客户机选择接受数据包。路由器没有理由阻止数据包,因为客户端特别请求信息,或者它正在等待信息。最重要的是,它知道在哪里重定向传入的流量。对不起,你说的不是真的。Ps,从你对其他答案的其他评论来看,你的网关或类似的东西似乎有问题。我看不出你发布的方法都不起作用的另一个原因。症状与您描述的完全一样:在lan中工作,在wan中不工作。你100%确定你的设置正确吗?你知道skype是如何工作的吗?哈哈,它使用了很多技巧。如果你确定,并且你认为插座会工作的话,任何方式都可以。那就给我一个小样品做测试。像hello这样的示例从客户端pc发送,然后在服务器上接收其响应和服务器响应