이미지 수신 서버에서는 이미지를 수신할 때마다 폼에 이를 알려주어야 합니다. 이 부분을 위해 이벤트 처리를 할 것입니다. 먼저 이미지를 수신하였을 때 이벤트를 처리하기 위해 대리자와 이벤트 인자 클래스를 정의합시다. RecvImageEventArgs 이름의 클래스를 추가하세요.
public class RecvImageEventArgs : EventArgs {
상대 IPEndPoint를 가져오기 할 수 있는 속성을 제공합시다.
public IPEndPoint IPEndPoint { get; private set; }
상대측 IP 주소 개체와 IP 주소 문자열과 포트 정보를 가져오기 할 수 있는 속성도 제공합시다.
public IPAddress IPAddress { get { return IPEndPoint.Address; } } public string IPAddressStr { get { return IPAddress.ToString(); } } public int Port { get { return IPEndPoint.Port; } }
이미지 개체와 이미지 크기에 관한 정보도 가져오기 할 수 있는 속성을 제공합시다.
public Image Image { get; private set; } public Size Size { get { return Image.Size; } } public int Width { get { return Image.Width; } } public int Height { get { return Image.Height; } }
생성자에서는 상대 IPEndPoint 정보와 이미지 개체를 입력 인자로 받아 속성을 설정합니다.
internal RecvImageEventArgs(IPEndPoint remote_iep, Image image) { IPEndPoint = remote_iep; Image = image; }
ToString 메서드를 재정의하여 상대측 IP 정보와 이미지의 폭과 높이를 문자열로 형성하여 제공합시다.
public override string ToString() { return string.Format("IP:{0} width:{1} height:{1}", IPAddressStr, Width, Height); } }
이미지를 수신할 때 처리를 위한 대리자를 정의합시다.
public delegate void RecvImageEventHandler(object sender, RecvImageEventArgs e);
다음은 이번 실습에서 작성한 소스 코드입니다.
//RecvImageEventArgs.cs using System; using System.Net; using System.Drawing; namespace 원격제어기 { /// <summary> /// 이미지 수신 이벤트 인자 클래스 /// </summary> public class RecvImageEventArgs : EventArgs { /// <summary> /// IP 단말 - 가져오기 /// </summary> public IPEndPoint IPEndPoint { get; private set; } /// <summary> /// IP 주소 - 가져오기 /// </summary> public IPAddress IPAddress { get { return IPEndPoint.Address; } } /// <summary> /// IP 주소 문자열 - 가져오기 /// </summary> public string IPAddressStr { get { return IPAddress.ToString(); } } /// <summary> /// 포트 - 가져오기 /// </summary> public int Port { get { return IPEndPoint.Port; } } /// <summary> /// 이미지 - 가져오기 /// </summary> public Image Image { get; private set; } /// <summary> /// 이미지 크기 - 가져오기 /// </summary> public Size Size { get { return Image.Size; } } /// <summary> /// 이미지 폭 - 가져오기 /// </summary> public int Width { get { return Image.Width; } } /// <summary> /// 이미지 높이 - 가져오기 /// </summary> public int Height { get { return Image.Height; } } internal RecvImageEventArgs(IPEndPoint remote_iep, Image image) { IPEndPoint = remote_iep; Image = image; } /// <summary> /// ToString 메서드 /// </summary> /// <returns>IP주소 및 이미지 크기를 문자열로 반환</returns> public override string ToString() { return string.Format("IP:{0} width:{1} height:{1}", IPAddressStr, Width, Height); } } /// <summary> /// 이미지 수신 처리를 위한 대리자 /// </summary> /// <param name="sender">이벤트 통보 개체(게시자)</param> /// <param name="e">이벤트 처리 인자</param> public delegate void RecvImageEventHandler(object sender, RecvImageEventArgs e); }