//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
using System;
using System.Net;
using System.Text;
using System.Net.Sockets; 

class Sender
{

	public static void Main(string[] args)
	{	
		string address = "localhost";
		if(args.Length == 1)
			address = args[0];

		bool continueSending = true;
		while(continueSending)
		{		
			Console.WriteLine("Wprowadź wiadomość do wysłania. Wpisz 'quit', aby wyjść.");
			string message = Console.ReadLine();
			SendMessage(message, address);
			if(message == "quit")
			{
				SendMessage(message, address);
				continueSending = false;
			}	
		}
	}

	public static void SendMessage(string message, string server)
	{
		try
		{
			Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
			IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 5002);		
			client.Bind(localEP);		
			byte[] buffer = Encoding.ASCII.GetBytes(message);
			IPAddress address = Dns.Resolve(server).AddressList[0];
			IPEndPoint remoteEP = new IPEndPoint(address, 5001);
			client.SendTo(buffer, 0, buffer.Length, SocketFlags.None, remoteEP);
			client.Close();
		}
		catch(Exception ex)
		{
			Console.WriteLine(ex.ToString());
		}
	}
}
