Presentation is loading. Please wait.

Presentation is loading. Please wait.

소켓 프로그래밍.  프로젝트 생성 ◦ Visual Studio 2008 ◦ Visual C# 2008 Express Edition ◦ 통합 개발 환경 (IDE)  서버 소켓  클라이언트 소켓  소켓 프로그램 실행  추적과 디버깅  소켓 클래스 메서드  소켓.

Similar presentations


Presentation on theme: "소켓 프로그래밍.  프로젝트 생성 ◦ Visual Studio 2008 ◦ Visual C# 2008 Express Edition ◦ 통합 개발 환경 (IDE)  서버 소켓  클라이언트 소켓  소켓 프로그램 실행  추적과 디버깅  소켓 클래스 메서드  소켓."— Presentation transcript:

1 소켓 프로그래밍

2  프로젝트 생성 ◦ Visual Studio 2008 ◦ Visual C# 2008 Express Edition ◦ 통합 개발 환경 (IDE)  서버 소켓  클라이언트 소켓  소켓 프로그램 실행  추적과 디버깅  소켓 클래스 메서드  소켓 오류  IP 주소

3

4  프로젝트 생성 화면 프로젝트 형식 콘솔 응용 프로그램 프로젝트 이름 저장 위치 솔루션 이름 솔루션 디렉터리 생성 여부

5  생성된 프로젝트

6

7  프로젝트 생성 화면 콘솔 응용 프로그램 프로젝트 이름

8  생성된 프로젝트

9  두 개발환경 모두 비슷한 인터페이스를 제공 ◦ Type List – 네임스페이스, 클래스 ◦ Member List – 선택된 클래스의 멤버들 ◦ Using 지시어 – Method 접근을 용이하게 함

10  솔루션 탐색기 (Solution Explorer) ◦ 솔루션 / 프로젝트에 대한 참조, 파일 목록 ◦ 프로젝트에 포함되는 소스코드, 이미지, 설정파일 등  도구 상자 패널 (Toolbox Panel) ◦ GUI 에 필요한 컴포넌트를 제공  속성 패널 (Properties Panel) ◦ GUI 컴포넌트 속성과 이벤트 정보 확인 및 수정 ◦ GUI 컴포넌트 외에도 솔루션 탐색기에 열거된 파일의 속성 정보 확인 및 수정 가능  출력 패널 (Output Panel) ◦ 컴파일 정보에 관한 메시지 출력  오류 목록 패널 (Error List Panel) ◦ 오류에 대한 정보를 요약하여 표시

11  Toolbox panel Properties  panel Error List panel   Output panel Solution Explorer  panel

12  예제 프로그램 : EchoServer.cs  소켓 생성을 위해 Socket 클래스가 사용됨  Socket 생성자 public Socket( SocketInformation ) public Socket( AddressFamily, SocketType, ProtocolType ) ◦ AddressFamily( 열거형 )  소켓의 주소 지정 방법을 선택 ◦ SocketType( 열거형 )  소켓의 종류를 구분 ◦ ProtocolType( 열거형 )  프로토콜의 종류를 구분

13  일반적인 소켓은 통신을 하기 위해 IP 종단점을 필요로 함  IP 종단점의 구성 ◦ IP 주소 ◦ 포트번호  IPEndPoint 클래스 객체를 생성하여 IP 종단점을 정의  IPEndPoint 생성자 public IPEndPoint( long, int )  Long integer 형으로 IP 주소 표현 public IPEndPoint( IPAddress, int )  IPAddress 클래스를 이용하여 IP 주소 표현  IPAddress 클래스는 특수 IP 주소에 대한 열거형 값을 포함하고 있음 ◦ 생성자의 두 번째 인자는 포트번호  0 – 65536 의 범위

14  IPAddress 특수 IP 주소 FieldDescriptionVersion IPAddress.AnyListen for every interfaceIPv4 IPAddress.BroadcastBroadcast addressIPv4 IPAddress.IPv6AnyListen for every interfaceIPv6 IPAddress.IPv6LoopbackLoopback addressIPv6 IPAddress.IPv6NoneDo not listen for clientIPv6 IPAddress.LoopbackLoopback addressIPv4 IPAddress.NoneDo not listen for clientIPv4

15  예제 프로그램 : EchoClient.cs  서버와는 달리 접속할 위치를 알아야 함  Socket, IPEndPoint 객체 생성 ◦ IPEndPoint 객체 생성시 IPAddress 객체를 인자로 할 경우  IPAddress.Parse() 메서드는 문자형 IP 주소 (IPv4, IPv6) 를 인자로 받아서 IPAddress 객체를 반환  서버와 클라이언트가 동일한 호스트에 위치할 경우 루프백 주소 127.0.0.1 를 이용할 수 있음  포트번호에 연결하는 것은 서버와 동일

16  서버 프로젝트와 클라이언트 프로젝트 모두 컴파일 및 빌드를 수행  IDE 또는 명령 프롬프트를 통해 서버를 먼저 실행 후, 클라이언트 실행  방화벽 경고 시 해제

17  IDE 를 이용한 프로그램 추적과 디버깅  Locals ( 지역 ), Watch ( 조사식 ) ◦ Locals  디버깅 모드 시에 Locals 를 통해 프로그램 내에서 선언된 변수들의 변경사항을 확인할 수 있음  IDE 에 의해 자동으로 출력됨 ◦ Watch  특정 변수를 사용자가 직접 감시할 수 있음  변수이름을 입력 후 확인 가능

18  Locals 창  Watch 창

19  특정 시점의 프로세스를 감시하고자 할 때에는 중단점 (Break Point) 를 설정하여 프로그램을 일시 중지할 수 있음  중단점까지의 실행 후 코드 추적을 어떻게 진행해 나갈지에 대한 방법을 선택 ◦ Step Into  현재 라인이 메서드 호출을 포함할 경우 메서드가 정의된 곳으로 이동 ◦ Step Over  메서드가 정의된 곳으로 이동하지 않고 건너뜀 ◦ Step Out  현재 라인이 메서드 정의 내에 포함될 경우 호출한 위치로 복귀  Example : MainProgram.cs ExternalClass.cs

20  public void Bind(EndPoint) ◦ 종단점에 소켓을 바인딩  public void Listen(int) ◦ 클라이언트로부터의 접속요청을 대기  public void Connect(EndPoint) ◦ 서버에 접속을 시도  public Socket Accept() ◦ 큐에 대기하고 있는 접속요청을 수락  public int Send(byte[], int, SocketFlags) ◦ 데이터 송신 – 보낸 바이트 수를 정수형으로 반환  버퍼 – byte[], 길이 – int, 데이터를 보낼 방법 - SocketFlags  public int Receive(byte[]) ◦ 데이터 수신 – 받은 바이트 수를 정수형으로 반환  Byte[] 에 수신한 데이터를 저장  public void Close() ◦ 소켓을 닫고 리소스 해제

21 Socket() Bind() Receive() Send() Close() Socket() Send() Receive() Close() TCP 서버 TCP 클라이언트 Connect() Listen() Accept() 네트워크

22  소켓에서의 실행시간 오류  SocketException 예외 발생  SocketException 은 어떤 오류가 발생했는지를 나타내는 ErrorCode 속성을 포함하고 있음  오류코드는 Winsock 2 오류코드와 동일  Example : EchoServerSE.cs EchoClientSE.cs  오류를 처리하기 위해 try-catch 블록 사용

23  바이트 정렬 ◦ Big-endian – 최상위 바이트를 가장 높은 주소에 저장 ◦ Little-endian – 최상위 바이트를 가장 낮은 주소에 저장 ◦ Example : LongEndPoint.cs

24  바이트 정렬 (byte ordering) ◦ 메모리에 데이터를 저장할 때의 바이트 순서  빅 엔디안 (big-endian), 리틀 엔디안 (little-endian) 0x120x340x560x78 0x560x340x12 빅 엔디안 리틀 엔디안 0x10000x10010x10020x1003                    

25  네트워크 애플리케이션에서 바이트 정렬 방식을 고려해야 하는 경우 종단 시스템 라우터 종단 시스템 라우터 데이터 IP 주소 포트 번호 ? ? ? (a) (b) (c)

26  네트워크 애플리케이션에서 바이트 정렬 방식을 고려해야 하는 경우 (cont ’ d) ◦ 프로토콜 구현을 위해 필요한 정보  (a) IP 주소  빅 엔디안  (b) 포트 번호  빅 엔디안 ◦ 애플리케이션이 주고 받는 데이터  (c) 빅 엔디안 또는 리틀 엔디안으로 통일  네트워크 바이트 정렬 (network byte ordering) : 빅 엔디안 방식  호스트 바이트 정렬 (host byte ordering) : 시스템이 사용하는 고유한 바이트 정렬 방식 참고

27  바이트 정렬 함수 ( 유닉스 호환 )  바이트 정렬 함수 ( 윈속 확장 ) u_short htons (u_short hostshort); // host-to-network-short u_long htonl (u_long hostlong); // host-to-network-long u_short ntohs (u_short netshort); // network-to-host-short u_long ntohl (u_long netlong); // network-to-host-long int WSAHtons (SOCKET s, u_short hostshort, u_short* lpnetshort); int WSAHtonl (SOCKET s, u_long hostlong, u_long* lpnetlong); int WSANtohs (SOCKET s, u_short netshort, u_short* lphostshort); int WSANtohl (SOCKET s, u_long netlong, u_long* lphostlong);

28  바이트 정렬 함수 사용 소켓 함수 hton*( ) 소켓 함수에게 넘겨줄 데이터 소켓 함수 ntoh*( ) 애플리케이션이 사용 소켓 함수가 결과로 전달

29  Current host IP address ◦ 예제 프로그램 : HostIP.cs  DNS lookup ◦ 예제 프로그램 : IPLookup.cs  Retrieving client’s IP address ◦ 예제 프로그램 : WelcomeServer.cs WelcomeClient.cs


Download ppt "소켓 프로그래밍.  프로젝트 생성 ◦ Visual Studio 2008 ◦ Visual C# 2008 Express Edition ◦ 통합 개발 환경 (IDE)  서버 소켓  클라이언트 소켓  소켓 프로그램 실행  추적과 디버깅  소켓 클래스 메서드  소켓."

Similar presentations


Ads by Google