C# Socket (Server)

using System;

// 1) 사용될 네임 스페이스들
// .NET 네트워크 네임스페이스
using System.Net;
// .NET 소켓 네임스페이스
using System.Net.Sockets;


namespace UdpEchoServer
{
class App
{
// 2) 서버의 포트 번호를 지정하여 주었다.
// 이 포트 번호는 클라이언트도 알아야 한다.
private const int ServerPortNumber = 5432;

[STAThread]
static void Main(string[] args)
{
try {
// 3) UDP socket을 만든다.
Socket udpSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);

// 4) 소켓에 종단점을 연결하자.

// 소켓을 바인드 하기위한 종단점(end point)을 만든다.
// 모든 주소의 데이터를 수신 해야 하므로 IPAddress.Any를
// 사용한다.
EndPoint localEP = new IPEndPoint(
IPAddress.Any, ServerPortNumber);
// 원격 호스트의 종단점을 얻어오기 위한 임시 종단점을 만든다.
EndPoint remoteEP = new IPEndPoint(
IPAddress.None, ServerPortNumber);
// 소켓에 종단점을 바인드 한다.
udpSocket.Bind(localEP);


// 5) 데이터를 받아서 바로 보낸다.

// 데이터를 받기 위해 버퍼를 설정하자.
byte [] receiveBuffer = new byte [512];
try {
while (true) {
// 데이터를 버퍼에 받아오며, 원격 호스트의 종단점을 알아온다.
int receivedSize = udpSocket.ReceiveFrom(receiveBuffer,
ref remoteEP);
// 바로 데이터를 보낸다.
udpSocket.SendTo(receiveBuffer, receivedSize,
SocketFlags.None, remoteEP);
}
} finally {
// 6) 소켓을 닫자.
udpSocket.Close();
}
} catch (SocketException se) {
// 예외를 처리하자.
Console.WriteLine(se.ToString());
}
}
}
}