ciao ragazzi ricevo una eccezione su codice all'apparenza perfetto.sto cercando di implementare una chat, con gestione multithread dei client.
questo è il while del server in cui vengono accettate le connessioni in ingresso.nel momento in cui un client si connette, la connessione avviene ma ricevo la suddetta eccezione sulla riga networkStream.Read(bytesFrom, 0, (int)client.ReceiveBufferSize); in particolare sul terzo parametro della funzione.allego sotto il codice del client che al momento della connessione manda il nick con una $ concatenata.
ho provato anche a modificare il terzo parametro e a mettere un numero elevato di byte da leggere come 4096.l'eccezione nn viene sollevata li ma si sposta tre righe più sotto...
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
dicendo che lenght non può essere minore di 0.
codice:
while (true)
{
//blocks until a client has connected to the server
System.Diagnostics.Debug.WriteLine("server in ascolto");
TcpClient client = this.tcpListener.AcceptTcpClient();
//create a thread to handle communication
//with connected client
System.Diagnostics.Debug.WriteLine("client connesso!!");
//agiungo alla hash poi avvio thread
byte[] bytesFrom = new byte[10025];
string dataFromClient = null;
NetworkStream networkStream = client.GetStream();
networkStream.Read(bytesFrom, 0, (int)client.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
clientsList.Add(dataFromClient, client);
broadcast(dataFromClient + " Joined ", dataFromClient, false);
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(new object[] { client, dataFromClient});
}
CLIENT
codice:
{
client = new TcpClient();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3000);
client.Connect(serverEndPoint);
NetworkStream serverStream = client.GetStream();
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] buffer = encoder.GetBytes(this.textBox1.Text);
serverStream.Write(buffer, 0, buffer.Length);
serverStream.Flush();
}