2010-12-02 75 views

回答

1

你应该看看一些中间件teknologies像WCFWeb service 这是面向对象的,易开发,当你第一次得到了它的窍门

2

要做到这一点,你需要实现通过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); 
    } 
} 

希望这有助于。

2

迄今为止所有的回答都使用基于TCP的方法。如果您需要高性能和低延迟,那么您可能会发现使用UDP代替更好。

TCP会带来很多开销,以确保数据包在丢失(以及各种其他功能位)时会被重新发送。另一方面,UDP让你处理未到达的数据包。如果你有一个游戏,丢失奇怪的更新并不重要,你可以通过使用UDP而不是TCP来获得更好的带宽使用,延迟和可扩展性。

尽管UDP仍然让你面对所有防火墙,安全等问题。

如果你需要把它无需担心防火墙是一个问题工作,那么你要选择使用HTTP通过端口80

+0

同意的解决方案,UDP可能是一个更好的选择。 – Matt 2010-12-02 13:06:31