C# 用c语言实现两台计算机之间的通信#
因此,我试图用C#构建某种远程控制应用程序,但我对套接字编程一无所知。我对它做了很多搜索,但找不到我要找的东西 我唯一需要的是通过互联网在两台计算机之间进行通信,我只需要一种方法来发送和接收一个简单的字符串变量,如“robot:move”,但我不知道如何发送,如果有人能帮助我,我会非常高兴 另外,我还没有开始这个项目,所以不管它是windows窗体还是控制台应用程序 提前谢谢 更新: 感谢您的帮助,我学会了如何使用WCF,并成功地创建了所需的应用程序,但不幸的是,它只在本地工作,而且我没有静态IP地址或Windows/IIS主机通过internet托管它。我唯一拥有的就是一台Linux/Apache主机,我尝试了mono,但没有成功。所以我想知道我的问题是否有不同的解决方案 另外,是否有其他编程语言,如C或JAVA,使这成为可能?C# 用c语言实现两台计算机之间的通信#,c#,c,sockets,C#,C,Sockets,因此,我试图用C#构建某种远程控制应用程序,但我对套接字编程一无所知。我对它做了很多搜索,但找不到我要找的东西 我唯一需要的是通过互联网在两台计算机之间进行通信,我只需要一种方法来发送和接收一个简单的字符串变量,如“robot:move”,但我不知道如何发送,如果有人能帮助我,我会非常高兴 另外,我还没有开始这个项目,所以不管它是windows窗体还是控制台应用程序 提前谢谢 更新: 感谢您的帮助,我学会了如何使用WCF,并成功地创建了所需的应用程序,但不幸的是,它只在本地工作,而且我没有静态I
如果是这样的话,你能给我一个关于如何做的链接吗?你应该看看信号器 在C#中,组件之间有多种通信方式:
使用哪一种取决于项目的目的。我建议仔细阅读每一项,并决定哪一项适用于您的问题。更新:5年后 我现在会使用gRPC和protbuf序列化。这将允许您为客户端和服务器使用不同的语言。ProtoBuf也完全兼容(支持向后和向前兼容)。 以下是“入门”)文档:
我认为最好的解决方案是使用WCF服务。 以下是上述链接中的一个简短示例:
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
// Other methods are not shown here.
}
客户呢
// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
关键是您有一个契约(接口)和一个实现此接口的服务(类)。然后,当该服务托管在web、窗体或控制台应用程序中时,您可以从另一个应用程序添加对该服务的引用,这并不重要——有多种传输(绑定)可用。
这里是MSDN入门部分的链接。如果计算机在同一网络上,我将使用
TCPListener
和TCPClient
以及StreamReader
和StreamWriter
类来建立通信。它们需要IP地址和通信端口
如果您可以解决防火墙问题,它们也可以用于通过internet进行通信。您想使用简单的控制台应用程序进行通信吗?对于本网站来说,这是一个有点过于宽泛的问题,除非您添加有关限制和要求的更多详细信息,否则可能会关闭。我建议不要直接处理
sockets
,而是使用一个库来隐藏所有这些东西,以使其更易于使用,比如。但是,一旦你选择了一种技术,如果你迷路了或者不了解它的某个方面,请随意问一个新的具体问题。是的,控制台应用程序会很好。我是一名web开发人员,我以前从未做过这样的事情,所以我不熟悉这方面的技术,但我肯定会深入研究WCF,感谢您的回答“两个程序相互对话”(通过internet或在同一台计算机上的程序之间)的通用术语称为进程内通信,或IPC。以及每种方法的优缺点。希望这能帮助你缩小搜索范围。(WCF实际上充当各种形式IPC的包装器,因此您可以通过套接字或WCF或命名管道执行WCF,或通过邮件槽执行WCF,而对代码的更改很少。)SignalR是否需要ASP.net?目前尚不清楚OP使用的是什么。SignalR在这种情况下确实不适用。SignalR没有提供一种从请求获得直接响应的好方法/实用方法。例如,假设我从一个web api服务控制器类向一个.net客户端发出了一个请求,我没有很好的方法将该请求的响应返回到该控制器类中。.net远程处理在使用上几乎与WCF相同,但远程处理已被弃用,不推荐用于新的软件项目。@ScottChamberlain-WCF用于SOA。并非所有应用程序都需要SOA。现在,.Net远程处理确实是一种较旧的技术,但我不认为它被弃用。你在微软上看到了这样的声明吗?在BILD的顶部,“这个主题是针对遗留技术的,它保留了与现有应用程序的向后兼容性,不推荐用于新的开发。现在应该使用Windows通信基金会(WCF)开发分布式应用程序。”@ScottChamberlain-谢谢我更新了我的答案谢谢你的帮助性回答,我要试试WCF。老实说,我认为这不是一个好主意,直接使用TCP(套接字),特别是如果你的新手这样做,第一次尝试很难做到正确。对于OP所描述的情况,有很多更好的解决方案可用(在.NET本身和免费第三方librires中),它们更易于使用,并且需要更少的代码来设置。