내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

SocketPermission 클래스

전송 주소에 대해 연결을 만들거나 허용하는 권한을 제어합니다.

네임스페이스:  System.Net
어셈블리:  System(System.dll)

[SerializableAttribute]
public sealed class SocketPermission : CodeAccessPermission, 
	IUnrestrictedPermission

SocketPermission 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드SocketPermission(PermissionState) Socket 에 대한 무제한 액세스를 허용하거나 Socket에 대한 액세스를 허용하지 않는 SocketPermission 클래스의 새 인스턴스를 초기화합니다.
Public 메서드SocketPermission(NetworkAccess, TransportType, String, Int32)지정된 사용 권한을 사용하여 주어진 전송 주소에 대한 SocketPermission 클래스의 새 인스턴스를 초기화합니다.
위쪽

  이름설명
Public 속성AcceptList이 사용 권한 인스턴스 하에서 허용할 수 있는 끝점을 식별하는 EndpointPermission 인스턴스 목록을 가져옵니다.
Public 속성ConnectList이 사용 권한 인스턴스 하에서 연결할 수 있는 끝점을 식별하는 EndpointPermission 인스턴스 목록을 가져옵니다.
위쪽

  이름설명
Public 메서드AddPermission전송 주소에 대한 사용 권한 집합에 사용 권한을 추가합니다.
Public 메서드Assert스택의 상위 호출자에게 리소스에 대한 액세스 권한이 없는 경우에도 호출 코드를 사용하여 이 메서드를 호출하는 코드를 통해 권한 요청으로 보호되는 리소스에 액세스할 수 있다는 것을 선언합니다. Assert 를 사용하면 보안 문제가 발생할 수 있습니다. (CodeAccessPermission에서 상속됨)
Public 메서드Copy SocketPermission 인스턴스의 복사본을 만듭니다. (CodeAccessPermission.Copy()을(를) 재정의함)
Public 메서드Demand현재 인스턴스에서 지정한 사용 권한이 호출 스택의 일부 상위 호출자에만 부여된 경우 런타임에 SecurityException을 강제로 발생시킵니다. (CodeAccessPermission에서 상속됨)
Public 메서드Deny 사용되지 않습니다. 호출 스택의 상위 호출자가 이 메서드를 호출하는 코드를 통해 현재 인스턴스에서 지정한 리소스에 액세스하지 못하게 합니다. (CodeAccessPermission에서 상속됨)
Public 메서드Equals지정한 CodeAccessPermission 개체가 현재 CodeAccessPermission과 같은지 여부를 확인합니다. (CodeAccessPermission에서 상속됨)
Public 메서드FromXml SocketPermission 인스턴스를 XML 인코딩으로 다시 만듭니다. (CodeAccessPermission.FromXml(SecurityElement)을(를) 재정의함)
Public 메서드GetHashCode해시 테이블 같은 데이터 구조 및 해시 알고리즘에 적합한 CodeAccessPermission 개체의 해시 코드를 가져옵니다. (CodeAccessPermission에서 상속됨)
Public 메서드GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Public 메서드IntersectSocketPermission 인스턴스의 논리 교집합을 반환합니다. (CodeAccessPermission.Intersect(IPermission)을(를) 재정의함)
Public 메서드IsSubsetOf현재 사용 권한이 지정된 사용 권한의 하위 집합인지 여부를 확인합니다. (CodeAccessPermission.IsSubsetOf(IPermission)을(를) 재정의함)
Public 메서드IsUnrestricted개체의 전체 사용 권한 상태를 확인합니다.
Public 메서드PermitOnly호출 스택의 상위 호출자가 이 메서드를 호출하는 코드를 통해 현재 인스턴스에서 지정한 리소스를 제외한 모든 리소스에 액세스할 수 없게 합니다. (CodeAccessPermission에서 상속됨)
Public 메서드ToString현재 권한 개체의 문자열 표현을 만들고 반환합니다. (CodeAccessPermission에서 상속됨)
Public 메서드ToXml SocketPermission 인스턴스 및 현재 상태의 XML 인코딩을 만듭니다. (CodeAccessPermission.ToXml()을(를) 재정의함)
Public 메서드UnionSocketPermission 인스턴스의 논리합을 반환합니다. (CodeAccessPermission.Union(IPermission)을(를) 재정의함)
위쪽

  이름설명
Public 필드정적 멤버AllPorts모든 포트를 나타내는 상수를 정의합니다.
위쪽

SocketPermission 인스턴스는 연결을 받아들이거나 Socket 연결을 초기화하기 위한 사용 권한을 제어합니다. 호스트 이름 또는 IP 주소, 포트 번호 및 전송 프로토콜을 대해 Socket 사용 권한을 설정할 수 있습니다.

참고참고

호스트 이름으로 소켓 권한을 만드는 것은 좋지 않습니다. 호스트 이름은 IP 주소로 확인되어야 하며 이로 인해 스택이 차단될 수 있기 때문입니다.

다음 예제에서는 SocketPermission 클래스를 사용하여 다양한 소켓 액세스 제한을 설정, 변경 및 적용합니다.



     // Creates a SocketPermission restricting access to and from all URIs.
     SocketPermission mySocketPermission1 = new SocketPermission(PermissionState.None);

     // The socket to which this permission will apply will allow connections from www.contoso.com.
     mySocketPermission1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.contoso.com", 11000);

     // Creates a SocketPermission which will allow the target Socket to connect with www.southridgevideo.com.
     SocketPermission mySocketPermission2 =
                                new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "www.southridgevideo.com", 11002);

     // Creates a SocketPermission from the union of two SocketPermissions.
     SocketPermission mySocketPermissionUnion = 
                                (SocketPermission)mySocketPermission1.Union(mySocketPermission2);

     // Checks to see if the union was successfully created by using the IsSubsetOf method.
     if (mySocketPermission1.IsSubsetOf(mySocketPermissionUnion) && 
     	   mySocketPermission2.IsSubsetOf(mySocketPermissionUnion)){
          Console.WriteLine("This union contains permissions from both mySocketPermission1 and mySocketPermission2"); 

          // Prints the allowable accept URIs to the console.
          Console.WriteLine("This union accepts connections on :");

          IEnumerator myEnumerator = mySocketPermissionUnion.AcceptList;
	   while (myEnumerator.MoveNext()) {
               Console.WriteLine(((EndpointPermission)myEnumerator.Current).ToString());
	        }      

             // Prints the allowable connect URIs to the console.
          Console.WriteLine("This union permits connections to :");

          myEnumerator = mySocketPermissionUnion.ConnectList;
	   while (myEnumerator.MoveNext()) {
               Console.WriteLine(((EndpointPermission)myEnumerator.Current).ToString());
	        }      

           }


     // Creates a SocketPermission from the intersect of two SocketPermissions.
     SocketPermission mySocketPermissionIntersect = 
                               (SocketPermission)mySocketPermission1.Intersect(mySocketPermissionUnion);

     // mySocketPermissionIntersect should now contain the permissions of mySocketPermission1.
     if (mySocketPermission1.IsSubsetOf(mySocketPermissionIntersect)){
          Console.WriteLine("This is expected");
     }
    // mySocketPermissionIntersect should not contain the permissios of mySocketPermission2.
     if (mySocketPermission2.IsSubsetOf(mySocketPermissionIntersect)){
          Console.WriteLine("This should not print");
     }



// Creates a copy of the intersect SocketPermission.
     SocketPermission mySocketPermissionIntersectCopy = 
                               (SocketPermission)mySocketPermissionIntersect.Copy();

     if (mySocketPermissionIntersectCopy.Equals(mySocketPermissionIntersect)){
     Console.WriteLine("Copy successfull");
     }


     // Converts a SocketPermission to XML format and then immediately converts it back to a SocketPermission.
     mySocketPermission1.FromXml(mySocketPermission1.ToXml());


     // Checks to see if permission for this socket resource is unrestricted.  If it is, then there is no need to
     // demand that permissions be enforced.
     if (mySocketPermissionUnion.IsUnrestricted()){
     	
          //Do nothing.  There are no restrictions.

     }
     else{
         // Enforces the permissions found in mySocketPermissionUnion on any Socket Resources used below this statement. 
         mySocketPermissionUnion.Demand();
     }

	IPHostEntry myIpHostEntry = Dns.Resolve("www.contoso.com");
	IPEndPoint myLocalEndPoint = new IPEndPoint(myIpHostEntry.AddressList[0], 11000);

       Socket s = new Socket(myLocalEndPoint.Address.AddressFamily,
       	                           SocketType.Stream,
                                         ProtocolType.Tcp);
       try{
            s.Connect(myLocalEndPoint);
       }
       catch (Exception e){
            Console.WriteLine("Exception Thrown: " + e.ToString());
       } 

      // Perform all socket operations in here.

      s.Close();


.NET Framework

4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework 에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 다음을 참조하십시오. .NET Framework 시스템 요구 사항.

이 형식의 static(Visual Basic의 경우 Shared) 모든 공용 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

커뮤니티 추가 항목

추가
표시:
© 2015 Microsoft