2015. 2. 2. 16:48
C# with UDP/IP
프로그램 설명
udp 클라이언트/서버 예제입니다.
UdpClient 클래스는 전송 및 동기 블록 모드 비 연결 UDP 데이터 그램 을 수신하기위한 간단한 방법을 제공합니다. UDP 는 비 연결 전송 프로토콜 이기 때문에, 전송 및 데이터를 수신 하기 전에 원격 호스트 연결을 설정할 필요가 없습니다.
다음의 두 가지 방법 중 하나를기본 원격 호스트를 확립 하는 옵션 을 가질 것 :
1. 원격 호스트 이름 및 매개 변수로 포트 번호를 사용하여 UdpClient 클래스의 인스턴스를 만듭니다.
2. UdpClient 클래스의 인스턴스를 생성 한 다음 연결 메소드를 호출합니다.
ReceiveFrom method 의 IPEndPoint 을 이용해서 전송하는 호스트의 정보를 알 수 있습니다.
실행 후
메시지 전송 후
프로그램 작성 순서
1. 소켓과 관련한 네임스페이스를 서버/클라이언트 모두에 포함 시킵니다.
using System.Net; using System.Net.Sockets;
2. 서버 프로그램
static void Main(string[] args) { int recv = 0; byte[] data = new byte[1024]; IPEndPoint ep = new IPEndPoint(IPAddress.Any, 9050); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); server.Bind(ep); Console.WriteLine("Waiting for a client..."); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint remoteEP = (EndPoint)sender; recv = server.ReceiveFrom(data, ref remoteEP); Console.WriteLine("[first] Message received from {0}", remoteEP.ToString()); Console.WriteLine("[first] received data : {0}", Encoding.UTF8.GetString(data, 0, recv)); string welcome = "Welcome to udp server"; data = Encoding.UTF8.GetBytes(welcome); server.SendTo(data, remoteEP); while(true) { data = new byte[1024]; recv = server.ReceiveFrom(data, ref remoteEP); string recvData = Encoding.UTF8.GetString(data, 0, recv); Console.WriteLine("received data : {0}", recvData); server.SendTo(Encoding.UTF8.GetBytes(recvData), remoteEP); Console.WriteLine("send data : {0}", Encoding.UTF8.GetString(data, 0, recv)); Console.WriteLine(""); } server.Close(); }
3. 클라이언트 프로그램
static void Main(string[] args) { int recv = 0; byte[] data = new byte[1024]; string input, stringData; IPEndPoint serverEP = new IPEndPoint(IPAddress.Parse("192.168.0.12"), 9050); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint remoteEP = (EndPoint)sender; string welcome = "hello, udp server?"; data = Encoding.UTF8.GetBytes(welcome); client.SendTo(data, data.Length, SocketFlags.None, serverEP); data = new byte[1024]; recv = client.ReceiveFrom(data, ref remoteEP); Console.WriteLine("[first] Message received from {0}", remoteEP.ToString()); stringData = Encoding.UTF8.GetString(data, 0, recv); Console.WriteLine(stringData); while (true) { Console.Write("send data : "); input = Console.ReadLine(); if (input == "exit") break; data = Encoding.UTF8.GetBytes(input); client.SendTo(data, data.Length, SocketFlags.None, serverEP); recv = client.ReceiveFrom(data, ref remoteEP); stringData = Encoding.UTF8.GetString(data); Console.WriteLine("received data : {0}", stringData); } Console.WriteLine("Stopping client"); client.Close(); }
'C# with UDP/IP' 카테고리의 다른 글
[Program C#]Broadcast (0) | 2015.02.25 |
---|---|
[Program C#]UDP Multicast (0) | 2015.02.12 |
[Program C#]UDP 통신 - 기본(UdpClient) - 콘솔 버전 (0) | 2015.02.02 |
TCP & UDP 비교 (0) | 2015.02.02 |