Questo blog è stato creato come diario persoanle

Questo blog è realizzato come diario personale,per provare le mie
capacità di programmazione e altro

mercoledì 7 aprile 2010

Programma Server Client

namespace server
{
public partial class Form1 : Form
{
TcpListener ascolta = new System.Net.Sockets.TcpListener(System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName())[0], 80);
private delegate string Metodo(string s);
Metodo delegato;
Metodo aggUtente;
SplittaComandi splitta = new SplittaComandi();
byte[] buf;
TcpClient cliente = new TcpClient();
NetworkStream leggi;// = new NetworkStream(new Socket(System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName())[0].AddressFamily, SocketType.Stream, ProtocolType.Tcp), System.IO.FileAccess.Read);
public Form1()
{
InitializeComponent();
delegato = new Metodo(SettaTesto);
aggUtente = new Metodo(SettaUtente);
splitta.Users += new SplittaComandi.AggiuntaUtente(splitta_Users);
}
void splitta_Users(string utente)
{
SettaUtente(utente);
}
private void button1_Click(object sender, EventArgs e)
{
ascolta.Start();
ascolta.BeginAcceptTcpClient(new AsyncCallback(AcettareConnessione), "");
button1.Enabled = false;
}
private void AcettareConnessione(IAsyncResult risultato)
{
cliente = ascolta.EndAcceptTcpClient(risultato);
leggi = new NetworkStream(cliente.Client);
buf=new byte[cliente.ReceiveBufferSize];
leggi.BeginRead(buf, 0, cliente.ReceiveBufferSize, new AsyncCallback(LeggereComunicazione), "");
}
private void LeggereComunicazione(IAsyncResult risultato)
{
leggi.EndRead(risultato);
string testo = "";
for (int i = 0; i < buf.Length; i++)
testo += (char)buf[i];
this.SettaTesto(testo);
leggi.BeginWrite(ConvertiString("+-" + splitta.Comando(testo) + "-+\n"), 0, ConvertiString("+-" + splitta.Comando(testo) + "-+\n").Length, new AsyncCallback(Scrivere), "");
SettaTesto("+-" + splitta.Comando(testo) + "-+");
}
private void Scrivere(IAsyncResult risultato)
{
leggi.EndRead(risultato);
}
private byte[] ConvertiString(string testo)
{
char[] vettore = testo.ToCharArray();
byte[] vetConvertito = new byte[vettore.Length];
for (int i = 0; i < vettore.Length; i++)
vetConvertito[i] = (byte)vettore[i];
return vetConvertito;
}
public string SettaTesto(string s)
{
if (!richTextBox1.InvokeRequired)
richTextBox1.Text += s.Split('\n')[0] + "\n";
else
richTextBox1.Invoke(delegato, new object[] { s });
return s;
}
public string SettaUtente(string s)
{
if (listBox1.Items.Contains(s))
return s;
if (!listBox1.InvokeRequired)
listBox1.Items.Add(s);
else
listBox1.Invoke(aggUtente, new object[] { s });
return s;
}
}
public class SplittaComandi
{
public delegate void AggiuntaUtente(string utente);
public event AggiuntaUtente Users;
public string Comando(string comando)
{
comando = comando.Remove(0, 2);
comando = comando.Replace("\0","");
comando = comando.Remove(comando.Length - 3);
if (comando.Contains("Ciao sono l'utente "))
{
Users(comando.Replace("Ciao sono l'utente ", ""));
return "Benvenuto " + comando.Replace("Ciao sono l'utente ", "");
}
if (comando.Contains("Mostrami gli utenti connessi"))
return "Gli utenti connessi attualmente sono :";
if (comando.Contains("Ciao io me ne vado"))
return "Connessione chiusa correttamente ";
return "";
}
}
}

namespace client
{
public partial class Form1 : Form
{
TcpListener ascolta = new System.Net.Sockets.TcpListener(System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName())[0], 80);
TcpClient cliente = new TcpClient();
byte[] buf;
private delegate string Metodo(string s);
Metodo delegato;
NetworkStream leggi;// = new NetworkStream(new Socket(AddressFamily.Atm, SocketType.Stream, ProtocolType.IPv4), System.IO.FileAccess.Read);
public Form1()
{
InitializeComponent();
delegato = new Metodo(SettaTesto);
}
private void button1_Click(object sender, EventArgs e)
{
cliente.Connect(new System.Net.IPAddress(new byte[] { 10, 100, 68, 129 }), 80);
buf = ConvertiString("-+Ciao sono l'utente " + Environment.UserName + "+-\n");
SettaTesto("-+Ciao sono l'utente " + Environment.UserName + "+-\n");
leggi = new NetworkStream(cliente.Client);
cliente.SendBufferSize = buf.Length;
leggi.BeginWrite(buf, 0, buf.Length, new AsyncCallback(app), "");
button1.Enabled = false;
}
private byte[] ConvertiString(string testo)
{
char[] vettore = testo.ToCharArray();
byte[] vetConvertito = new byte[vettore.Length];
for (int i = 0; i < vettore.Length; i++)
vetConvertito[i] = (byte)vettore[i];
return vetConvertito;
}
private void app(IAsyncResult risultato)
{
leggi.EndWrite(risultato);
leggi.BeginRead(buf, 0, buf.Length, new AsyncCallback(lettura), "");
}
private void lettura(IAsyncResult risultato)
{
leggi.EndRead(risultato);
string testo = "";
for (int i = 0; i < buf.Length; i++)
testo += (char)buf[i];
SettaTesto(testo);
}
public string SettaTesto(string s)
{
if (!richTextBox1.InvokeRequired)
richTextBox1.Text += s.Split('\n')[0] + "\n";
else
richTextBox1.Invoke(delegato, new object[] { s });
return s;
}
}
}