Version: 2020.2
언어: 한국어
NetworkClient
NetworkServer

NetworkConnection

참고: UNet은 지원이 중단되었으며 향후 Unity에서 삭제될 예정입니다. 현재 새로운 시스템이 개발 중입니다. 자세한 내용과 다음 단계는 이 블로그 포스트FAQ를 참조하십시오.

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