в C #. NET, как отправить сообщение на удаленный компьютер через Интернет? - PullRequest
3 голосов
/ 02 декабря 2010

c # .net framework 4.0 профиль клиента, приложение Windows. Я занимаюсь разработкой игры, которая должна передавать свои текущие движения игры через Интернет на удаленный компьютер, на котором установлено то же приложение (игра). Таким же образом текущие движенияигры удаленного компьютера нужно отправить обратно ... Как это могло быть возможно?

Ответы [ 5 ]

3 голосов
/ 02 декабря 2010

Все ответы до сих пор используют подход, основанный на TCP .Если вам нужна высокая производительность и низкая задержка, вам может быть лучше использовать UDP .

TCP приносит много накладных расходов, чтобы гарантировать, что пакеты будут повторно отправлены в случае их потери.(и другие функциональные возможности).UDP, с другой стороны, оставляет за вами право решать, какие пакеты не поступают.Если у вас есть игра, в которой потеря нечетного обновления не важна, вы можете добиться гораздо лучшего использования пропускной способности, задержки и масштабируемости, используя UDP вместо TCP.

UDP по-прежнему оставляет все проблемы брандмауэров и безопасностии т. д.

Если вам нужно, чтобы он работал, не беспокоясь о проблемах с брандмауэрами, вам нужно выбрать решение, использующее HTTP через порт 80.

2 голосов
/ 02 декабря 2010

Для этого вам нужно реализовать клиент-серверное поведение через TCP / IP
Есть очень разные способы сделать это Этот код, который я написал, может дать вам старт (это вариант, но не единственный, я оставляю вам выбор метода, который подходит вам лучше всего)

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);
    }
}

Надеюсь, это поможет.

1 голос
/ 02 декабря 2010

Вы должны ознакомиться с некоторыми технологиями промежуточного программного обеспечения, такими как WCF , Веб-сервис это объектно-ориентированный и простой в освоении, когда вы впервые его освоите

0 голосов
/ 02 декабря 2010

Вы можете использовать пространства имен System.Net и System.Net.Sockets для отправки пакетов TCP.

0 голосов
/ 02 декабря 2010

Тебе есть над чем подумать.

Вам нужно подумать о security, firewall issues и т. Д.

Если все это отложить в сторону, тогда вы можете настроить подход сервер / клиент для сокетов tcp.Быстрый Google даст много примеров.

Посмотрите на пример Microsoft http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx

Что вы пробовали?

...