程序之间的互联网通信,无需担心C#?

时间:2011-06-26 11:57:15

标签: c#

我想在程序的两个实例之间提供直接连接,这两个实例位于两台不同的计算机上 我已经有了获取IP地址的方法,但是如何在我的程序之间建立连接并且防火墙或端口没有问题?
我需要通过连接发送序列化对象。

Edit2 :具体字词为点对点连接。

编辑:我认为我需要解释“没有问题”部分。

首先,当程序尝试与Internet通信时,会打开恼人的Windows防火墙权限对话框 在Windows 7上,您有两个复选框:
1.允许私人(家庭/工作)网络,默认情况下进行检查,有时无法取消选中 2.允许在公共网络上,默认情况下选中或取消选中...

NO ONE 我知道确保选中所有复选框。 没有人
在没有人知道的情况下,这有时会以糟糕的方式中断程序!

下一步...大多数人都在路由器后面,路由器通常会阻止对未定义端口的所有请求,除非规则被更改。
没有人会接受为了使用程序而添加这些规则。的没有人即可。

3 个答案:

答案 0 :(得分:4)

您可以将WCF用于此目的。

它并没有解决“所有”网络问题,但我怀疑任何技术都会。

答案 1 :(得分:0)

听起来你正在寻找一种绕过防火墙的方法,以便用户在使用程序时不必处理这类内容。

如果情况确实如此,那就这么想吧。如果Windows防火墙允许您(或其他任何人)这样做,Windows防火墙是否会擅长工作?

您可能想要做的是使用TCP打开一个端口,并通过它将序列化对象发送到目标侦听器,目标侦听器知道如何将这些位解码回对象。

如果您需要打开该端口,您的用户必须允许该端口。如果他们正在运行阻止它的防火墙,则需要正确配置该防火墙以允许您的程序与目标计算机进行交互。

您可以使用TcpClient,TcpListener(System.Net)和BinaryFormatter(System.Runtime.Serialization)通过TCP发送序列化对象。 请记住,您需要将自定义类指定为[Serializable]。

答案 2 :(得分:0)

所以,使用TcpClientTcpListener工作...只要我转发侦听器路由器上的端口。
所以这不是一个选择。

我最终使用我的数据库对命令进行排队并偶尔检查它们,并在必要时将它们出列。

目前,我找不到任何好的答案。