Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 8 Advanced Concept

Similar presentations


Presentation on theme: "Chapter 8 Advanced Concept"— Presentation transcript:

1 Chapter 8 Advanced Concept
소켓 프로그래밍

2 Advanced Concept 소켓 옵션 소켓 예외 로깅

3 소켓 옵션 소켓 옵션 Socket 클래스에서 제공되는 두 개의 소켓 옵션 메서드 소켓 옵션 메서드가 가지는 두 개의 필수 인자
소켓의 작동을 제어하는 속성 높은 레벨의 소켓 추상 클래스에서는 직접 접근 불가 Socket 클래스에서 제공되는 두 개의 소켓 옵션 메서드 GetSocketOption() – 소켓 옵션의 값을 읽어옴 SetSocketOption() – 소켓 옵션의 값을 설정 소켓 옵션 메서드가 가지는 두 개의 필수 인자 SocketOptionLevel 소켓 옵션의 설정 적용 범위를 정의 SocketOptionName 적용할 옵션의 이름을 의미 예제 프로그램 : MulticastSenderOpt.cs, MulticastReceiverOpt.cs

4 소켓 옵션 SocketOptionLevel Level Description IP IPv4 소켓만 지정 IPv6
모든 소켓 Tcp TCP 소켓만 지정 Udp UDP 소켓만 지정

5 소켓 옵션 SocketOptionName SocketOptionName AcceptConnection
DropMembership MulticastInterface SendBuffer AddMembership DropSourceMembership MulticastLoopback SendLowWater AddSourceMembership Error MulticastTimeToLive SendTimeout BlockSource ExclusiveAddressUse NoChecksum Type Broadcast Expedited NoDelay TypeOfService BsdUrgent HeaderIncluded OutOfBandInline UnblockSource ChecksumCoverage HopLimit PacketInformation UpdateAcceptContext Debug IPOptions ReceiveBuffer UpdateConnectContext DontFragment IpTimeToLive ReceiveLowWater UseLoopback DontLinger KeepAlive ReceiveTimeout DontRoute Linger ReuseAddress

6 소켓 예외 SocketException 클래스 에러코드는 Winsock 에러코드에서 유래
System.Net.Sockets 네임스페이스는 소켓 오류 발생 시에 throw 되는 SocketException 클래스를 제공 에러코드는 Winsock 에러코드에서 유래 에러코드를 이용하여 소켓 에러를 처리 할 수 있음

7 소켓 예외 Winsock 에러 코드 Code Name Meaning 10004 WSAEINTR
Interrupted function call. 10040 WSAEMSGSIZE Message too long. 10009 WSAEBADF File handle is not valid. 10041 WSAEPROTOTYPE Protocol wrong type for socket. 10013 WSAEACCES Permission denied. 10042 WSAENOPROTOOPT Bad protocol option. 10014 WSAEFAULT Bad address. 10043 WSAEPROTONOSUPPORT Protocol not supported. 10022 WSAEINVAL Invalid argument. 10044 WSAESOCKTNOSUPPORT Socket type not supported. 10024 WSAEMFILE Too many open files. 10045 WSAEOPNOTSUPP Operation not supported. 10035 WSAEWOULDBLOCK Resource temporarily unavailable. 10046 WSAEPFNOSUPPORT Protocol family not supported. 10036 WSAEINPROGRESS Operation now in progress. 10047 WSAEAFNOSUPPORT Address family not supported by protocol family. 10037 WSAEALREADY Operation already in progress. 10048 WSAEADDRINUSE Address already in use. 10038 WSAENOTSOCK Socket operation on nonsocket. 10049 WSAEADDRNOTAVAIL Cannot assign requested address. 10039 WSAEDESTADDRREQ Destination address required. 10050 WSAENETDOWN Network is down.

8 소켓 예외 Winsock 에러 코드 Code Name Meaning 10051 WSAENETUNREACH
Network is unreachable. 10062 WSAELOOP Cannot translate name. 10052 WSAENETRESET Network dropped connection on reset. 10063 WSAENAMETOOLONG Name too long. 10053 WSAECONNABORTED Software caused connection abort. 10064 WSAEHOSTDOWN Host is down. 10054 WSAECONNRESET Connection reset by peer. 10065 WSAEHOSTUNREACH No route to host. 10055 WSAENOBUFS No buffer space available. 10066 WSAENOTEMPTY Directory not empty. 10056 WSAEISCONN Socket is already connected. 10067 WSAEPROCLIM Too many processes. 10057 WSAENOTCONN Socket is not connected. 10068 WSAEUSERS User quota exceeded. 10058 WSAESHUTDOWN Cannot send after socket shutdown. 10069 WSAEDQUOT Disk quota exceeded. 10059 WSAETOOMANYREFS Too many references. 10070 WSAESTALE Stale file handle reference. 10060 WSAETIMEDOUT Connection timed out. 10071 WSAEREMOTE Item is remote. 10061 WSAECONNREFUSED Connection refused. 10091 WSASYSNOTREADY Network subsystem is unavailable.

9 소켓 예외 Winsock 에러 코드 Code Name Meaning 10092 WSAVERNOTSUPPORTED
Winsock.dll version out of range. 10111 WSA_E_CANCELLED Call was canceled. 10093 WSANOTINITIALISED Successful WSAStartup not yet performed. 10112 WSAEREFUSED Database query was refused. 10101 WSAEDISCON Graceful shutdown in progress. 11001 WSAHOST_NOT_FOUND Host not found. 10102 WSAENOMORE No more results. 11002 WSATRY_AGAIN Nonauthoritative host not found. 10103 WSAECANCELLED Call has been canceled. 11003 WSANO_RECOVERY This is a nonrecoverable error. 10104 WSAEINVALIDPROCTABLE Procedure call table is invalid. 11004 WSANO_DATA Valid name, no data record of requested type. 10105 WSAEINVALIDPROVIDER Service provider is invalid. * WSA_INVALID_HANDLE Specified event object handle is invalid. 10106 WSAEPROVIDERFAILEDINIT Service provider failed to initialize. * WSA_NOT_ENOUGH_MEMORY Insufficient memory available. 10107 WSASYSCALLFAILURE System call failure. * WSA_INVALID_PARAMETER One or more parameters are invalid. 10108 WSASERVICE_NOT_FOUND Service not found. * WSA_OPERATION_ABORTED Overlapped operation aborted. 10109 WSATYPE_NOT_FOUND Class type not found. * WSA_IO_INCOMPLETE Overlapped I/O event object not in signaled state. 10110 WSA_E_NO_MORE * WSA_IO_PENDING Overlapped operations will complete later.

10 로깅 프로그램이 어떠한 에러를 가지고 있을 경우에 에러를 조사하고자 하는 프로그래머에게는 최종사용자를 위해 출력된 메시지만으로는 정보가 충분하지 않음 로깅 사용자가 프로그램을 사용하는 동안 디버깅에 관한 추가 정보는 따로 로그파일에 저장 로깅 구현의 어려움 소켓 프로그램과 파일 로깅에 영향을 줄 수 있는 수많은 요소들을 고려해야 하기 때문 해결 - NLog 쉽고 간단하게 사용할 수 있는 로깅 라이브러리

11 로깅 NLog NLog의 사용 .NET을 위해 만들어진 오픈 소스 로깅 API
콘솔 로깅과 파일 로깅 기능을 프로그램에 추가할 수 있음 에서 무료로 다운로드 가능 NLog의 사용 NLog 인스톨 후, 로깅 API를 사용하기 위해 솔루션 탐색기에서 Add Reference (참조 추가)를 해주어야 함 .NET 탭에서 NLog 라이브러리를 찾아서 추가 .NET 탬에서 NLog 라이브러리가 보이지 않을 경우, Browse(찾아보기)를 통해 직접 NLog.dll 파일을 찾아서 추가

12 로깅 참조 추가 (Add Reference)

13 로깅 프로그램 내에 NLog 로깅 기능을 구현하기 위한 설정파일 정의
우선 솔루션 탐색기에서 프로젝트에 새로운 항목을 추가하여 텍스트파일을 생성 아래와 같은 XML 문법을 사용하여 설정파일을 작성 작성한 설정 파일은 파일속성을 통해 Copy to Output Directory (출력 디렉터리로 복사) 항목을 Copy always (항상 복사)로 설정 <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns=" xmlns:xsi="   <targets> <target name="file" xsi:type="File" fileName="log.txt" /> </targets>   <rules> <logger name="*" minlevel="Debug" writeTo="file" /> </rules> </nlog>

14 로깅 설정파일 속성 변경

15 로깅 프로젝트에 설정파일 추가가 완료되면 소스코드에서 로거를 사용할 수 있음 프로그램의 소스코드 내에서 로거 초기화
프로젝트에 설정파일 추가가 완료되면 소스코드에서 로거를 사용할 수 있음 프로그램의 소스코드 내에서 로거 초기화 using NLog; // using directive for NLog public class Program { // get a logger using current class name static Logger logger = LogManager.GetCurrentClassLogger(); static void SomeMethod() logger.Debug("Debug message"); }

16 로깅 Logger 객체를 생성한 후로는 로거에 메시지를 추가할 수 있음
로그 엔트리를 추가할 때에는 로그레벨을 선택하여 추가할 수 있음 로그레벨 메시지의 의도나 심각성을 나타내기 위해 사용 나중에 프로그램의 실행흐름을 검토할 때에 메시지를 분류하기 위한 효과적인 방법이기도 함 로그레벨은 설정파일의 설정을 통해서 각각 다르게 처리할 수 있음 예제 프로그램 : POP3ClientLog.cs

17 로깅 NLog 로그 레벨 Level Description Debug 디버깅을 위한 진단 메시지 Error
논리 또는 실행시간 오류 Fatal 비정상적인 종류를 일으키는 심각한 오류 Info 각종 정보 Trace Debug 보다 좀 더 깊이 있고 세밀한 진단 정보 Warn 경고 메시지


Download ppt "Chapter 8 Advanced Concept"

Similar presentations


Ads by Google