정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Socket 클래스

2013-12-13

Berkeley 소켓 인터페이스를 구현합니다.

System.Object
  System.Net.Sockets.Socket

Namespace:  System.Net.Sockets
어셈블리:  System.Net(System.Net.dll)

public class Socket : IDisposable

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

  이름설명
Public 메서드Socket지정된 주소 패밀리, 소켓 종류 및 프로토콜을 사용하여 Socket 클래스의 새 인스턴스를 초기화합니다.
맨 위

  이름설명
Public 속성AddressFamilySocket의 주소 패밀리를 가져옵니다.
Public 속성Connected마지막 작업에서 Socket이 원격 호스트에 연결되었는지 여부를 나타내는 값을 가져옵니다.
Public 속성LocalEndPoint소켓이 바인딩된 로컬 IP 주소와 포트 번호를 포함하는 로컬 끝점을 가져옵니다. 소켓이 통신에 사용하는 끝점입니다.
Public 속성NoDelaySocket에서 Nagle 알고리즘을 사용하는지 여부를 나타내는 Boolean 값을 가져오거나 설정합니다.
Public 속성정적 멤버OSSupportsIPv4IPv4 지원이 사용 가능하며 현재 호스트에서 사용하도록 설정되어 있는지 여부를 나타내는 값을 가져옵니다.
Public 속성정적 멤버OSSupportsIPv6IPv6이 지원되고 현재 호스트에서 사용하도록 설정되어 있는지 여부를 나타내는 값을 가져옵니다.
Public 속성ProtocolTypeSocket의 프로토콜 종류를 가져옵니다.
Public 속성ReceiveBufferSizeSocket의 수신 버퍼 크기를 지정하는 값을 가져오거나 설정합니다.
Public 속성RemoteEndPoint원격 끝점을 가져옵니다.
Public 속성SendBufferSizeSocket의 송신 버퍼 크기를 지정하는 값을 가져오거나 설정합니다.
Public 속성TtlSocket에서 보낸 IP(인터넷 프로토콜) 패킷의 TTL(Time-To-Live) 값을 지정하는 값을 가져오거나 설정합니다.
맨 위

  이름설명
Public 메서드AcceptAsync들어오는 연결 시도를 받아들이는 비동기 작업을 시작합니다.
Public 메서드Bind소켓을 특정 로컬 끝점과 연결합니다. 특정 로컬 끝점을 사용해야 하는 경우가 아니면 ConnectAsync 메서드를 사용하기 전에 Bind를 호출할 필요가 없습니다.
Public 메서드정적 멤버CancelConnectAsync원격 호스트 연결에 대한 처리 중인 비동기 소켓 작업을 취소합니다.
Public 메서드Close()Socket 연결을 닫고 연결된 리소스를 모두 해제합니다.
Public 메서드Close(Int32)Socket 연결을 닫고, 대기된 데이터를 보낼 수 있게 제한 시간이 지정된 관련 리소스를 모두 해제합니다.
Public 메서드ConnectAsync(SocketAsyncEventArgs)원격 호스트 연결에 대한 비동기 요청을 시작합니다.
Public 메서드정적 멤버ConnectAsync(SocketType, ProtocolType, SocketAsyncEventArgs)원격 호스트 연결에 대한 비동기 요청을 시작합니다.
Public 메서드Dispose()Socket에서 사용하는 관리되지 않는 리소스를 해제하고, 필요에 따라 관리되는 리소스를 삭제합니다.
Protected 메서드Dispose(Boolean)Socket에서 사용하는 관리되지 않는 리소스를 해제하고, 필요에 따라 관리되는 리소스를 삭제합니다.
Public 메서드Equals(Object)지정한 Object가 현재 Object와 같은지 확인합니다. (Object에서 상속됨)
Protected 메서드FinalizeSocket 클래스에서 사용한 리소스를 해제합니다. (Object.Finalize()을(를) 재정의함)
Public 메서드GetHashCode특정 형식에 대한 해시 함수 역할을 합니다. (Object에서 상속됨)
Public 메서드GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Public 메서드Listen들어오는 연결 시도를 수신합니다.
Protected 메서드MemberwiseClone현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Public 메서드ReceiveAsync연결된 Socket 개체에서 데이터를 받기 위해 비동기 요청을 시작합니다.
Public 메서드ReceiveFromAsync연결된 개체에서 데이터를 받기 위해 비동기 요청을 시작합니다.
Public 메서드SendAsync데이터를 연결된 Socket 개체에 비동기적으로 보냅니다.
Public 메서드SendToAsync특정 원격 호스트에 데이터를 비동기적으로 보냅니다.
Public 메서드ShutdownSocket의 보내기 또는 받기를 사용할 수 없도록 합니다.
Public 메서드ToString현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨)
맨 위

  이름설명
Public 확장 메서드AssociateToNetworkInterface네트워크 인터페이스에 대한 정보를 새 네트워크 인터페이스 정보 집합과 연관시켜 설정합니다. (SocketExtensions에서 정의됨)
Public 확장 메서드GetCurrentNetworkInterface네트워크 인터페이스에 대한 사용 가능한 모든 정보를 가져옵니다. (SocketExtensions에서 정의됨)
Public 확장 메서드SetNetworkPreference통신망 기술 또는 비통신망 기술을 사용하여 네트워크 인터페이스의 기본 설정을 구성합니다. (SocketExtensions에서 정의됨)
Public 확장 메서드SetNetworkRequirement통신망 기술 또는 비통신망 기술을 사용하여 네트워크 인터페이스의 요구 사항을 구성합니다. (SocketExtensions에서 정의됨)
맨 위

Socket 클래스는 네트워크 통신을 위한 메서드 및 속성 집합을 제공합니다. Socket 클래스를 사용하면 ProtocolType 열거형에 나열된 통신 프로토콜을 사용하여 비동기 데이터 전송을 수행할 수 있습니다.

 Windows Phone OS 7.1의 경우 지원되는 ProtocolType 값은 TCP 및 UDP 프로토콜입니다. Windows Phone OS 7.1에서는 TCP 유니캐스트, UDP 유니캐스트 및 UDP 멀티캐스트 클라이언트가 지원됩니다.

데이터를 보내고 받는 일이 끝나면 Shutdown 메서드를 사용하여 Socket을 비활성화합니다. Shutdown을 호출한 후에 Close 메서드를 호출하여 Socket과 관련된 모든 리소스를 해제합니다.

소켓에 대해서는 이 보안 정책 시스템이 도메인 간 네트워크 액세스에 영향을 줍니다. 소켓으로부터의 연결에는 보안 정책이 필요합니다.


public class Example
{
  static ManualResetEvent clientDone = new ManualResetEvent(false);

  public static void Demo(System.Windows.Controls.TextBlock outputBlock)
  {

      SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();

      // NOTE: This is a fake end point. 
      // You must change this to a valid URL or you will get an exception below.
      DnsEndPoint hostEntry = new DnsEndPoint("http://www.contoso.com", 80);

      // Create a socket and connect to the server
      Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

      socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(SocketEventArg_Completed);

      socketEventArg.RemoteEndPoint = hostEntry;
      socketEventArg.UserToken = sock;
      sock.ConnectAsync(socketEventArg);
      clientDone.WaitOne();
  }

  // A single callback is used for all socket operations. 
  // This method forwards execution on to the correct handler 
  // based on the type of completed operation
  static void SocketEventArg_Completed(object sender, SocketAsyncEventArgs e)
  {
      switch (e.LastOperation)
      {
          case SocketAsyncOperation.Connect:
              ProcessConnect(e);
              break;

          case SocketAsyncOperation.Receive:
              ProcessReceive(e);
              break;

          case SocketAsyncOperation.Send:
              ProcessSend(e);
              break;

          default:
              throw new Exception("Invalid operation completed");
      }
  }

  // Called when a ConnectAsync operation completes
  private static void ProcessConnect(SocketAsyncEventArgs e)
  {
      if (e.SocketError == SocketError.Success)
      {
          // Successfully connected to the server

          // Send 'Hello World' to the server
          byte[] buffer = Encoding.UTF8.GetBytes("Hello World");
          e.SetBuffer(buffer, 0, buffer.Length);
          Socket sock = e.UserToken as Socket;
          bool willRaiseEvent = sock.SendAsync(e);

          if (!willRaiseEvent)
          {
              ProcessSend(e);
          }
      }
      else
      {
          throw new SocketException((int)e.SocketError);
      }
  }

      // Called when a ReceiveAsync operation completes
      // </summary>
  private static void ProcessReceive(SocketAsyncEventArgs e)
  {
      if (e.SocketError == SocketError.Success)
      {
          // Received data from server

          // Data has now been sent and received from the server. 
          // Disconnect from the server
          Socket sock = e.UserToken as Socket;
          sock.Shutdown(SocketShutdown.Send);
          sock.Close();
          clientDone.Set();
      }
      else
      {
          throw new SocketException((int)e.SocketError);
      }
  }


  // Called when a SendAsync operation completes
  private static void ProcessSend(SocketAsyncEventArgs e)
  {
      if (e.SocketError == SocketError.Success)
      {
          // Sent "Hello World" to the server successfully

          //Read data sent from the server
          Socket sock = e.UserToken as Socket;
          bool willRaiseEvent = sock.ReceiveAsync(e);

          if (!willRaiseEvent)
          {
              ProcessReceive(e);
          }
      }
      else
      {
          throw new SocketException((int)e.SocketError);
      }
  }
}


Windows Phone OS

지원되는 버전: 8.0, 7.1

Windows Phone

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

표시: