//
// 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.IO;
using System.Net;
using System.Net.Sockets;

namespace AsyncClnt
{
	/// <summary>
	/// Podsumowanie dla Class1.
	/// </summary>
	class AsyncClientClass
	{
		static void Main(string[] args)
		{
			string server = "localhost";
			if(args.Length == 1)
				server = args[0];
			TcpClient client = new TcpClient();
			client.Connect(server, 5000);
			NetworkStream tcpStream = client.GetStream();
			// Uzyskanie StreamWriter, dzięki czemu można zapisywać ciągi zamiast bajtów
			StreamWriter reqStreamW = new StreamWriter(tcpStream);
			// Tutaj należy umieścić kod pozwalający na użycie serwera TCP, na przykład
			// poniższe wiersze zapisują ciąg w strOutData na serwer:
			reqStreamW.Write("Witaj serwerze!");
			// Użycie StreamWriter do wysłania danych
			reqStreamW.Flush();
			// Uzyskanie StreamReader sw celu odczytania ciągów zamiast bajtów
			StreamReader reqStreamR = new StreamReader(tcpStream);
			// Poniższa instrukcja odczytuje ciąg z serwera:
			String strInData = reqStreamR.ReadToEnd();
			Console.WriteLine(strInData);
			// Zamknięcie strumienia i klienta
			tcpStream.Close();
			client.Close();
		}
	}
}
