C# 用c语言实现两台计算机之间的通信#

C# 用c语言实现两台计算机之间的通信#,c#,c,sockets,C#,C,Sockets,因此,我试图用C#构建某种远程控制应用程序,但我对套接字编程一无所知。我对它做了很多搜索,但找不到我要找的东西 我唯一需要的是通过互联网在两台计算机之间进行通信,我只需要一种方法来发送和接收一个简单的字符串变量,如“robot:move”,但我不知道如何发送,如果有人能帮助我,我会非常高兴 另外,我还没有开始这个项目,所以不管它是windows窗体还是控制台应用程序 提前谢谢 更新: 感谢您的帮助,我学会了如何使用WCF,并成功地创建了所需的应用程序,但不幸的是,它只在本地工作,而且我没有静态I

因此,我试图用C#构建某种远程控制应用程序,但我对套接字编程一无所知。我对它做了很多搜索,但找不到我要找的东西

我唯一需要的是通过互联网在两台计算机之间进行通信,我只需要一种方法来发送和接收一个简单的字符串变量,如“robot:move”,但我不知道如何发送,如果有人能帮助我,我会非常高兴

另外,我还没有开始这个项目,所以不管它是windows窗体还是控制台应用程序

提前谢谢

更新:

感谢您的帮助,我学会了如何使用WCF,并成功地创建了所需的应用程序,但不幸的是,它只在本地工作,而且我没有静态IP地址或Windows/IIS主机通过internet托管它。我唯一拥有的就是一台Linux/Apache主机,我尝试了mono,但没有成功。所以我想知道我的问题是否有不同的解决方案

另外,是否有其他编程语言,如C或JAVA,使这成为可能?
如果是这样的话,你能给我一个关于如何做的链接吗?

你应该看看信号器

在C#中,组件之间有多种通信方式:

  • 插座
  • 使用.NET远程处理[过时]
  • 使用WCF
  • 使用WebClient

  • 使用哪一种取决于项目的目的。我建议仔细阅读每一项,并决定哪一项适用于您的问题。

    更新: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中),它们更易于使用,并且需要更少的代码来设置。