Version: 2018.1
NetworkClient
NetworkServer

NetworkConnection

NetworkConnection은 네트워크 연결을 캡슐화하는 고수준 API 클래스입니다. (NetworkClient)[class-NetworkClient] 오브젝트에는 NetworkConnection가 있고, NetworkServers에는 각 클라이언트에서 하나씩 여러 개의 연결이 있습니다. NetworkConnections는 바이트 배열을 전송하거나 직렬화된 오브젝트를 네트워크 메시지로 전송할 수 있습니다.

프로퍼티

프로퍼티: 기능:
hostId 이 연결의 NetworkTransport hostId입니다.
connectionId 이 연결의 NetworkTransport connectionId입니다.
isReady 이 연결로 상태 업데이트를 전송할지 제어하는 플래그입니다.
lastMessageTime 이 연결에서 메시지가 마지막으로 수신된 시간입니다.
address 이 연결이 연결된 엔드포인트의 IP 주소입니다.
playerControllers AddPlayer()를 사용하여 추가된 플레이어 집합입니다.
clientOwnedObjects 이 연결이 권한을 보유한 오브젝트 집합입니다.

NetworkConnection 클래스에는 데이터가 전송 레이어로 전송되거나 전송 레이어로부터 데이터를 수신할 때 호출되는 가상 함수가 있습니다. 이 함수를 통해 NetworkConnection의 특수 버전으로 이 데이터를 검사 또는 수정하거나 심지어는 다른 소스로 전송할 수도 있습니다. 이 함수는 디폴트 동작을 포함해 아래에 나와 있습니다.

public virtual void TransportRecieve(byte[] bytes, int numBytes, int channelId)
{
    HandleBytes(bytes, numBytes, channelId);
}

public virtual bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
{
    return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
}

이 함수는 예를 들어 수신 또는 발신 패킷 콘텐츠의 로그를 작성하는 용도로 사용됩니다. 아래에는 패킷의 첫 50바이트를 콘솔에 기록하는 NetworkConnection에서 파생된 DebugConnection 클래스의 예가 나와 있습니다. 이런 클래스를 사용하려면 NetworkClient 또는 NetworkServer에서 SetNetworkConnectionClass() 함수를 호출해야 합니다.

class DebugConnection : NetworkConnection
{
    public override void TransportRecieve(byte[] bytes, int numBytes, int channelId)
    {
        StringBuilder msg = new StringBuilder();
        for (int i = 0; i < numBytes; i++)
        {
            var s = String.Format("{0:X2}", bytes[i]);
            msg.Append(s);
            if (i > 50) break;
        }
        UnityEngine.Debug.Log("TransportRecieve h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);

        HandleBytes(bytes, numBytes, channelId);
    }

    public override bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
    {
        StringBuilder msg = new StringBuilder();
        for (int i = 0; i < numBytes; i++)
        {
            var s = String.Format("{0:X2}", bytes[i]);
            msg.Append(s);
            if (i > 50) break;
        }
        UnityEngine.Debug.Log("TransportSend    h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);

        return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
    }
}
NetworkClient
NetworkServer
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961