Unity结合C++开发服务器实现多人游戏(二)

客户端连接服务器


接到服时,ProudNetNetClient象.我们将该对象添加到客户端的NetManager.cs.

 


 

客户端使用ProudNet客户端库的情况,请参考Unity plugin 说明

 

public class NetManager : MonoBehaviour

{

    NetClient m_netClient;

...

NetManager开始时创建NetClient实例.

    void Start()

    {

        m_netClient = new NetClient();

...

NetClient进行事件或者信息的处理,此函数被称作NetClient.FrameMove.对此进行短时间的反复调用.

    void Update()

    {

        if (m_netClient != null)

        {

            m_netClient.FrameMove();

...

程序结束时,中断NetClient.

void OnApplicationQuit()

{

    // #SHOW08 Stop

    m_netClient.Disconnect();

}

现在,点击Login修改代码以连接到服务器.OnGUI修改如下.

调用NetClient.Connect尝试连接到服务器.

函数需要服务器的endpoint (地址和端口)协议版本.

void OnGUI()

{

    if (m_state == MyState.Disconnected || m_state == MyState.Connecting)

    {

        if (m_state == MyState.Disconnected)

        {

            if (GUI.Button(new Rect(10, 130, 100, 20), "Login!"))

            {

                var connectParam = new NetConnectionParam();

                connectParam.protocolVersion = new Guid();

                connectParam.protocolVersion.Set(Version);

                connectParam.serverIP = "localhost";

                connectParam.serverPort = ServerPort;

 

                m_netClient.Connect(connectParam);

                m_state = MyState.Connecting;

    ...

 

协议版本用防止接,如果客端和服器是不同的版本。当客户端程序的网络协议发生改变时,建议更改该值.网络协议版本将取决于收发信息的各种格式.

public static System.Guid Version = new System.Guid("{0x107b3b66,0xb7de,0x4091,{0xa5,0xba,0x72,0xca,0x1a,0xf5,0x1a,0xbc}}");

public static ushort ServerPort = 35475;

客户端试图连接到服务器,并获取结果.得到结果进行NetClient.JoinServerCompleteHandler事件处理,为此事件添加代码.

里,在代器地址被指定localhost,同时输入您的服务器地址.

在命令中输入ipconfig或者ifconfig显示您的服务器地址. 

m_netClient.JoinServerCompleteHandler =

    (ErrorInfo info, ByteArray replyFromServer) =>

{

    if (info.errorType == ErrorType.ErrorType_Ok)

    {

        m_state = MyState.Connected;

    }

    else

    {

        Debug.Log(info.ToString());

        m_state = MyState.Disconnected;

    }

};

进行防止与服务器断开连接的处理.假如可能出现小狗咬坏网线的情况.

如下所示,实现LeaveServerHandler.

 

m_netClient.LeaveServerHandler = (ErrorInfo info) =>

{

    Debug.Log(info.ToString());

    m_state = MyState.Disconnected;

};

 

现在,让我们运行客户端.按下Login按键显示"Connecting..."这样的状态.

因为,没有可连接的服务器,所以需要添加服务器,下一节再进行介绍.


第三篇:Unity结合C++开发服务器实现多人游戏(三)

你可能感兴趣的:(Unity结合C++开发服务器实现多人游戏(二))