using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; namespace Client { public class Client { //naam en inbox private string name; private Queue inbox; //for netwerk verbinding private TcpClient socket; private int serverport; private string serverAddress; //Create server public Client(int serverport, string serverAddress) { this.serverport = serverport; this.serverAddress = serverAddress; inbox = new Queue(); } //Start Client public void run() { Console.WriteLine("Starting client"); socket = new TcpClient(); Console.WriteLine("Connecting with " + serverAddress+":"+serverport); //Connect with server socket.Connect(serverAddress, serverport); //De loop hieronder is de kern van je Client. Hij wacht elke keer op een bericht en stopt deze dan //in je inbox while (true) { //byte array, hierin komt het bericht byte[] bytesFrom = new byte[10025]; //vraag verbinding op NetworkStream stream = socket.GetStream(); //lees data in van verbinding, dit wacht tot er een nieuw bericht in stream.Read(bytesFrom, 0, (int)socket.ReceiveBufferSize); //maak er een string van string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); //haal de restdata aan het einde weg (de string is altijd 10025 bytes lang, je bericht kan korter zijn) dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf('\n')); //Alleen de server weet je naam, dus zolang je geen naam hebt gekregen wacht je daarop if (name == null && dataFromClient.Substring(0, 7) == "client_") { //haal voor en achteraan spaties weg name = dataFromClient.Trim(); //jee ik heb een naam Console.WriteLine("My name is " + name); //Het naambericht hoeft niet in je inbox, deze heb je al vewerkt continue; } //stop het bericht in je inbox inbox.Enqueue(dataFromClient); //en laat het zien Console.WriteLine("Recieved: "+dataFromClient); } } public Queue Inbox { get { return inbox; } } //Verstuur een bericht public void sendMessage(string message) { //alleen als je verbinding hebt, en als je een naam hebt (anders zit je nog initilisatiefase) if (socket != null && name != null) { byte[] outStream = System.Text.Encoding.ASCII.GetBytes(message + '\n'); NetworkStream stream = socket.GetStream(); stream.Write(outStream, 0, outStream.Length); stream.Flush(); } } } }