140 likes | 303 Views
Network Programming Version 2.1. 학습목표. 소켓 프로그래밍의 개념을 이해한다 . 소켓을 사용하여 네트워크 프로그램을 구현할 수 있다. 1. 소켓 프로그래밍 개요. TCP/IP 프로토콜계층. TCP 응용프로그램. FTP, HTTP, Telnet, SMTP. UDP 응용프로그램. NFS, TFTP. 응용계층. 트랜스포트 계층. TCP. UDP. RARP. ARP. IP. ICMP. 인터넷계층. Hardware Interface. 네트워크 액세스계층.
E N D
Network Programming Version 2.1
학습목표 • 소켓 프로그래밍의 개념을 이해한다. • 소켓을 사용하여 네트워크 프로그램을 구현할 수 있다.
1. 소켓 프로그래밍 개요 TCP/IP 프로토콜계층 TCP 응용프로그램 FTP, HTTP, Telnet, SMTP UDP 응용프로그램 NFS, TFTP 응용계층 트랜스포트 계층 TCP UDP RARP ARP IP ICMP 인터넷계층 Hardware Interface 네트워크 액세스계층 응용계층(Application): 응용프로그램계층, Telnet, FTP, SMTP, HTTP 등 전송방법 규정 트랜스포트계층(Transport) : 네트워크 종단 간 데이터전송을 지원하는 계층(TCP/UDP방식) 인터넷계층(Internetwork) : 인터넷layer로 불리며 IP,ICMP,ARP등의 프로토콜로 구성 네트워크 액세스계층(Network Interface) : 데이터링크 레이어라고 불리며, IEEE 802.2,ATM, X25등의 전송방식을 포함
1. 소켓 프로그래밍 개요 • TCP와 UDP 전송방식 • TCP/IP 프로토콜은 연결 지향방식인 TCP (Transmission Control Protocol)와 비연결 지향방식인 UDP (User Datagram Protocol)로 구성 TCP 방식 UDP 방식 TCP방식 소켓프로그래밍 예 IPEndPoint ipep = new IPEndPoint (IPAddress.Any, 9999); Socket newsock = new Socket (AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp); Newsock.Bind (ipep); Newsock.Listen(10); Socket client = newsock.Accept (); UDP방식 소켓프로그래밍 예 IPEndPoint ipep = new IPEndPoint (IPAddress.Any, 9999); Socket newsock = new Socket (AddressFamily.InterNetwork,SocketType.Dgram, ProtocolType.Udp); Newsock.Bind (ipep);
1. 소켓 프로그래밍 개요 System.Net 네임스페이스 IP 주소관련 클래스 클래스 설 명 IPAddress 클래스 IPAddress 클래스는 주로 맴버메소드인 Parse()를 이용해 IP주소를 문자열 형태로 입력 ex)IPAddress addr = IPAddress.Parse(“192.168.0.1”); 네 개의 예약필드를 포함하고 있음. 예약 필드명 설 명
1. 소켓 프로그래밍 개요 • 사용 예) - 콘솔프로그램 using System; using System.Net; class IPTest { static void Main(string[] args) { IPAddress ex1 = IPAddress.Parse(“211.179.124.1”); IPAddress ex2 = IPAddress.Any; IPAddress ex3 = IPAddress.Broadcast; IPAddress ex4 = IPAddress. Loopback; IPAddress ex5 = IPAddress. None; Console.WriteLine(“{0}={1}”, “ex1”, ex1); Console.WriteLine(“{0}={1}”, “ex2(Any)”, ex2); Console.WriteLine(“{0}={1}”, “ex3(Broadcast)”, ex3); Console.WriteLine(“{0}={1}”, “ex4(Loopback)”, ex4); Console.WriteLine(“{0}={1}”, “ex5(None)”, ex5); } }
1. 소켓 프로그래밍 개요 IPEndPoint 클래스 //IPEndPoint는 로컬주소를 바인드 하거나 소켓과 원격 주소를 연결할 때 사용. using System; using System.Net; class ExIPEndPoint { static void Main(string[] args) { IPAddress ex = IPAddress.Parse(“211.179.124.1”); IPEndPoint ie = new IPEndPoint(ex, 8000); Console.WriteLine(“ToString() : {0}”, ie.ToString()); Console.WriteLine(“AddressFamily : {0}”, ie.AddressFamily); Console.WriteLine(“Address : {0}”, ie.Port); Console.WriteLine(“MaxPort:{0} MinPort:{1}”, IPEndPoint.MaxPort, IPEndPoint.MinPort); } }
2. 소켓 사용하기 • Socket 생성 (System.Net.Sockets) Socket sock = new Socket(AddressFamily af, SocketType st, ProtocolType pt;) SocketType ProtocolType 설 명
3. Socket 클래스를 이용한 바이트 단위 채팅 프로그램 • Server IPEndPoint ipep = new IPEndPoint(IPAddress.Any,7000); //7000번포트열기 Socket server = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); server.Bind (ipep); //채팅서버 바인딩 server.Listen (10); // 최대 10개의 클라이언트 접속 대기 Socket client = server.Accept (); // 클라이언트 접속처리 • Client IPEndPoint ipep = new IpEndPoint (IPAddress.Parse(ip), 7000);//접속할IP Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); client.Connect (ipep); // ip에 해당하는 컴퓨터 7000포트로 접속시도
4. NetworkStream 클래스 이용 문자열 기반 채팅프로그램 • Server IPEndPoint ipep = new IPEndPoint (IPAddress.Any,7000); //7000번포트열기 Socket server = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); server.Bind (ipep); //채팅서버 바인딩 server.Listen(10); //클라이언트 접속 대기 Socket client = server.Accept (); //클라이언트 접속처리 NetworkStream stream = new NetworkStream (client); //네트워크스트림 StreamReader reader = new StreamReader (stream); //읽기 스트림 StreamWriter writer = new StreamWriter (stream); //쓰기 스트림 string msg = reader.ReadLine (); //상대방이 보낸 메시지 읽어오기 writer.WriteLine (); //상대방에게 문자열단위로 데이터 보내기 writer.Flush (); //버퍼에 있는 내용을 모두 전송
4. NetworkStream 클래스 이용 문자열 기반 채팅프로그램 • Client IPEndPoint ipep = new IpEndPoint (IPAddress.Parse(ip), 7000); //접속할IP Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); client.Connect (ipep) ; //ip에 해당하는 컴퓨터 7000포트로 접속시도 NetworkStream stream = new NetworkStream (client); //네트워크스트림 StreamReader reader = new StreamReader (stream); //읽기스트림 StreamWriter writer = new StreamWriter (stream); //쓰기 스트림 string msg = reader.ReadLine (); //상대방이 보낸 메시지 읽어오기 writer.WriteLine (); //상대방에게 문자열단위로 데이터 보내기 writer.Flush (); //버퍼에 있는 내용을 모두 전송
5. C# 헬퍼 클래스를 이용한 채팅 프로그램 작성 • Server TcpListener server = new TcpListener(7000); //7000번 포트 열기 server.Start(); //서버프로그램 실행 TcpClient client = server.AcceptTcpClient(); //클라이언트 접속대기 NetworkStream stream = client.GetStream(); StreamReader reader = new StreamReader(stream); StreamWriter writer = new StreamWriter(stream); string msg = reader.ReadLine(); writer.WriteLine(); writer.Flush(); • Client TcpClient client = new TcpClient(ip, 7000); NetworkStream stream = client.GetStream(); StreamReader reader = new StreamReader(stream); StreamWriter writer = new StreamWriter(stream); string msg = reader.ReadLine(); writer.WriteLine(); writer.Flush();
6. 활용 예제 √ • 인터넷 웹 브라우저 만들기 • 특정 컴퓨터의 활성화된 포트번호 검사 • WebInfo (웹서버에 GET /index.html HTTP/1.0\r\n\n 전송) • 웹사이트분석 프로그램(WebRequest/WebResponse) • 파일 전송 프로그램(소켓 채팅기반) • CTOC_FILE_TRANS_INFO (전송할 파일정보) • CTOC_FILE_TRANS_YES (파일 전송 수락) • CTOC_FILE_TRANS_NO (파일 전송 거부) • 7500포트이용 • 이모티콘 채팅 프로그램 • 파일전송/이모티콘 • 멀티채팅 • SMTP 프로토콜을 이용한 전자메일 √ √