在c#net中,如何通过internet向远程计算机发送消息?

在c#net中,如何通过internet向远程计算机发送消息?,c#,.net,sockets,remoting,C#,.net,Sockets,Remoting,c#.net framework 4.0客户端配置文件,Windows应用程序。。 我正在开发一款游戏,需要通过互联网将游戏的当前移动发送到安装了相同应用程序(游戏)的远程计算机。以同样的方式,应将远程计算机游戏的当前移动发送回。。。 这怎么可能? 你有很多事情要考虑。 您需要考虑安全性,防火墙问题等 如果这些都放在一边,那么您可以设置tcp套接字服务器/客户端方法。 一个快速的谷歌将产生大量的例子 看看微软的例子 您尝试过什么?您可以使用System.Net和命名空间发送TCP数据包。您应该研

c#.net framework 4.0客户端配置文件,Windows应用程序。。 我正在开发一款游戏,需要通过互联网将游戏的当前移动发送到安装了相同应用程序(游戏)的远程计算机。以同样的方式,应将远程计算机游戏的当前移动发送回。。。
这怎么可能?

你有很多事情要考虑。 您需要考虑
安全性
防火墙问题

如果这些都放在一边,那么您可以设置tcp套接字服务器/客户端方法。 一个快速的谷歌将产生大量的例子

看看微软的例子


您尝试过什么?

您可以使用System.Net和命名空间发送TCP数据包。

您应该研究一些中间件技术,例如,
这是面向对象的,当您第一次掌握它的窍门时,它很容易开发。要做到这一点,您需要通过TCP/IP实现客户机-服务器行为
有很多不同的方法可以做到这一点 我写的这段代码可以给你一个开始(这是一个选项,但不是唯一的选项,我让你选择最适合你的方法)


希望这有帮助

到目前为止,所有答案都使用了基于主题的方法。如果您需要高性能和低延迟,那么您可能会发现使用它会更好

TCP带来了大量开销,以保证数据包在丢失时(以及各种其他功能位)会重新发送。另一方面,UDP让您自行处理未到达的数据包。如果你有一个游戏,丢失奇数更新并不重要,你可以通过使用UDP而不是TCP来获得更好的带宽利用率、延迟和可伸缩性

UDP仍然会给您带来防火墙、安全性等所有问题


如果您需要在不担心防火墙成为问题的情况下让它工作,那么您需要选择一个通过端口80使用HTTP的解决方案。

同意,UDP可能是一个更好的选择。
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

static class ServerProgram
{        
    [STAThread]
    static void Main()
    {     
        ATSServer();     
    }    

    static void ATSServer()
    {        
        TcpChannel tcpChannel = new TcpChannel(7000);
        ChannelServices.RegisterChannel(tcpChannel);

        Type commonInterfaceType = Type.GetType("ATSRemoteControl");
        RemotingConfiguration.RegisterWellKnownServiceType(commonInterfaceType,
        "RemoteATSServer", WellKnownObjectMode.SingleCall);
    }
}

public interface ATSRemoteControlInterface
{
    string yourRemoteMethod(string parameter);
}      

public class ATSRemoteControl : MarshalByRefObject, ATSRemoteControlInterface
{
    public string yourRemoteMethod(string GamerMovementParameter)
        {
            string returnStatus = "GAME MOVEMENT LAUNCHED";
            Console.WriteLine("Enquiry for {0}", GamerMovementParameter);
            Console.WriteLine("Sending back status: {0}", returnStatus);
            return returnStatus;
        }
}

class ATSLauncherClient
{
    static ATSRemoteControlInterface remoteObject;

    public static void RegisterServerConnection()
    {
        TcpChannel tcpChannel = new TcpChannel();
        ChannelServices.RegisterChannel(tcpChannel);

        Type requiredType = typeof(ATSRemoteControlInterface);

        //HERE YOU ADJUST THE REMOTE TCP/IP ADDRESS 
        //IMPLEMENT RETRIEVAL PROGRAMATICALLY RATHER THAN HARDCODING
        remoteObject = (ATSRemoteControlInterface)Activator.GetObject(requiredType,
        "tcp://localhost:7000/RemoteATSServer");

        string s = "";
        s = remoteObject.yourRemoteMethod("GamerMovement");  
    }

    public static void Launch(String GamerMovementParameter)
    {
        remoteObject.yourRemoteMethod(GamerMovementParameter);
    }
}