public static void PrzyjmowaniePolaczen(IAsyncResult _wynik) { Socket socket; try { socket = socketSerwera.EndAccept(_wynik); } catch (ObjectDisposedException) { return; } Klient kl = new Klient(socket); Dane.klient.Add(socket, kl); Interfejs.Konsola("dolaczyl nowy klient", Interfejs.KolorKonsoli.dolaczenie); socket.BeginReceive(kl.buffor, 0, kl.buffor.Length, SocketFlags.None, OdbieranieDanych, socket); socketSerwera.BeginAccept(PrzyjmowaniePolaczen, null); }
static void CiecieBuffora(Socket _socket, Klient _klient, int _odebrane) { _klient.bufforZajete += _odebrane; int indexer = 0; bool przerwanie = false; while (_klient.bufforZajete - indexer > 0) { int dlugosc = (int)_klient.buffor[indexer] - 1; indexer++; if (dlugosc <= _klient.bufforZajete - indexer) { byte[] przejsciowa = new byte[dlugosc]; Array.Copy(_klient.buffor, indexer, przejsciowa, 0, dlugosc); Pakiet pakiet = new Pakiet(przejsciowa, _socket); pakiet.Wykonanie(); Staty.pakietyOdebrane++; Staty.WyswietlStaty(); indexer += dlugosc; } else { indexer--; byte[] przejsciowa = new byte[_klient.bufforZajete - indexer]; Array.Copy(_klient.buffor, indexer, przejsciowa, 0, _klient.bufforZajete - indexer); Array.Copy(przejsciowa, _klient.buffor, przejsciowa.Length); _klient.bufforZajete = przejsciowa.Length; przerwanie = true; break; } } if (!przerwanie) _klient.bufforZajete = 0; }