Transcript TCP

Network Programming
Version 2.1
학습목표
소켓 프로그래밍의 개념을 이해한다.
소켓을 사용하여 네트워크 프로그램을 구현할 수 있다.
1. 소켓 프로그래밍 개요
TCP
응용프로그램
TCP/IP 프로토콜계층
FTP, HTTP,
Telnet, SMTP
UDP
응용프로그램
TCP
RARP
ARP
NFS,
TFTP
트랜스포트
계층
UDP
IP
Hardware
Interface
응용계층
ICMP
인터넷계층
네트워크
액세스계층
응용계층(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 방식
신뢰성
100% 신뢰성 보장
신뢰성 없음
네트워크부하
많음
상대적으로 적음
사용 예)
신뢰성이 요구되는 FTP, Telnet,
SMTP, POP3, HTTP 등에 사용
대용량 미디어 파일 전송
(물리적으로 100% 신뢰할 수 있는
케이블)
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
IP 주소를 나타내는 클래스
IPHostEntry
하나의 호스트에 대한 상세 정보를 제공하는 클래스
Dns
호스트 이름을 IP주소로 변환할 때 사용하는 클래스
IPEndPoint
IP주소와 포트로 네트워크 종단점 정보를 가져오는 클래스
IPAddress 클래스
IPAddress 클래스는 주로 맴버메소드인 Parse()를 이용해 IP주소를 문자열 형태로 입력
ex)IPAddress addr = IPAddress.Parse(“192.168.0.1”);
네 개의 예약필드를 포함하고 있음.
예약 필드명
설 명
Any
로컬시스템에서 사용할 수 있는 IP주소를 나타낼 때
Broadcast
로컬 네트워크의 IP 브로드캐스트 주소를 나타낼 때
Loopback
시스템의 루프백 주소를 나타낼 때
None
시스템에 네트워크 인터페이스가 없음을 나타낼 때
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
설 명
Dgram
Udp
비 연결 통신(UDP) 통신
Stream
Tcp
연결 지향 통신 (TCP) 통신
Raw
Icmp
ICMP(Internet Control Message Protocol)
Raw
Raw
패킷 통신
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 프로토콜을 이용한 전자메일√