TcpClient - Niepołączone gniazdo; problem

0

Witam. Mam program, który łączy się z serwerem, który przekazuje klienta do osobnego wątku w ten sposób, że ma utworzoną tablicę typu TcpClient. Gdy przyjmuję w jednym elemencie połączenie jest wszystko dobrze, ale w osobnym wątku gdy chcę otworzyć nowy strumień (wcześniej zamknąłem stary, żeby mógł nasłuchiwać dalej) wyskakuje mi wyjątek, że nie mogę otwierać strumieni na niepołączonych gniazdach :/. Sprawdzałem kod klienta i serwera, żaden nie zamyka tego połączenia. Jedynie co to strumień, który zawadzał w nasłuchu. Bardzo proszę o pomoc.

0

Proszę :):

        void tracker()
        {
            SetText st = Textet;
            TcpListener listener = new TcpListener(12343);
            listener.Start();
            while (true)
            {
                StreamReader sr = new StreamReader("C:\\SERVER\\a.txt");
                tc[tci] = listener.AcceptTcpClient();
                MessageBox.Show(tci.ToString());
                Textet("Nowe połączenie...");
                NetworkStream ns = tc[tci].GetStream();
                Byte[] buffer = new Byte[10000];
                int bytes = ns.Read(buffer, 0, 10000);
                string buffer2 = Encoding.Unicode.GetString(buffer, 0, bytes);
                String[] db = buffer2.Split('|');
                if (db[0] == "REG")
                {
                    st("Komenda rejestracji: LOGIN: " + db[1] + "; HASŁO: " + db[2]);
                }
                else
                {
                    st("Podano dane: LOGIN: " + db[0] + "; HASŁO: " + db[1]);
                }
                if (db[0] == "REG")
                {
                    try
                    {
                        DirectoryInfo di = null;
                        try
                        {
                            di = new DirectoryInfo("C:\\SERVER\\Users\\" + db[1]);
                        }
                        catch
                        {
                            st("Błąd podczas rejestracji...");
                            Byte[] bufor = Encoding.Unicode.GetBytes("REGNO");
                            ns.Write(bufor, 0, bufor.Length);
                            continue;
                        }
                        di.Create();
                        FileStream fi = new FileStream("C:\\SERVER\\Users\\" + db[1] + "\\data.txt", FileMode.Create);
                        fi.Close();
                        FileStream sfi = new FileStream("C:\\SERVER\\Users\\" + db[1] + "\\diary.txt", FileMode.Create);
                        sfi.Close();
                        StreamReader srr = new StreamReader("C:\\SERVER\\IDLIST.EXD");
                        string dadata = srr.ReadToEnd();
                        String[] listids = dadata.Split("\r\n".ToCharArray());
                        int id = randomizemethode(listids);
                        srr.Close();
                        StreamReader srt = new StreamReader("C:\\SERVER\\IDLIST.EXD");
                        string datawithid = srt.ReadToEnd();
                        srt.Close();
                        StreamWriter sw = new StreamWriter("C:\\SERVER\\IDLIST.EXD");
                        datawithid = datawithid + id.ToString();
                        sw.WriteLine(datawithid);
                        sw.Close();
                        StreamWriter ssw = new StreamWriter("C:\\SERVER\\Users\\" + db[1] + "\\data.txt");
                        ssw.WriteLine(id.ToString());
                        ssw.WriteLine(db[1]);
                        ssw.WriteLine(db[2]);
                        DateTime dt = DateTime.Now;
                        ssw.WriteLine(dt.Date);
                        ssw.Close();
                        Byte[] bufory = Encoding.Unicode.GetBytes("REGYES");
                        ns.Write(bufory, 0, bufory.Length);
                        st("Pomyślnie zarejestrowano!");
                        continue;
                    }
                    catch
                    {
                        st("Błąd podczas rejestracji...");
                        Byte[] bufor = Encoding.Unicode.GetBytes("REGNO");
                        ns.Write(bufor, 0, bufor.Length);
                        continue;
                    }                 
                }
                try
                {
                    sr.Close();
                    sr = new StreamReader("C:\\SERVER\\Users\\" + db[0] + "\\data.txt");
                }
                catch
                {
                    Byte[] no = Encoding.Unicode.GetBytes("NO");
                    ns.Write(no, 0, no.Length);
                    sr.Close();
                    ns.Close();
                    continue;
                }
                String[] db2 = new String[3];
                db2[0] = sr.ReadLine();
                db2[1] = sr.ReadLine();
                db2[2] = sr.ReadLine();
                if ((db[0] == db2[1]) & (db[1] == db2[2]))
                {
                    Byte[] yes = Encoding.Unicode.GetBytes("YES");
                    ns.Write(yes, 0, yes.Length);
                    st("Zalogowano pomyślnie!");
                }
                else
                {
                    Byte[] no = Encoding.Unicode.GetBytes("NO");
                    ns.Write(no, 0, no.Length);
                    st("Zły login lub hasło...");
                }
                ns.Close();
                String[] dat = new String[3];
                dat[0] = usi.ToString();
                MessageBox.Show(usi.ToString() + "|" + tci.ToString());
                dat[1] = db[0];
                dat[2] = db[1];
                ParameterizedThreadStart start = new ParameterizedThreadStart(methode);
                us[usi] = new Thread(start);
                us[usi].Start(dat);
                usi++;
                tci++;
            }
        }

        void methode(object usi)
        {
            //try
            //{
                String[] datas = (String[]) usi;
                int id = Int32.Parse(datas[0]);
                StreamReader sr = new StreamReader("C:\\SERVER\\Users\\" + datas[1] + "\\data.txt");
                string s = sr.ReadToEnd();
                String[] si = s.Split("\r\n".ToCharArray());
                MessageBox.Show(id.ToString());
                /*NetworkStream ns = tc[id].GetStream();*/
            //}
            //catch
            //{
            //    MessageBox.Show(" ERROR ");
            //}
        }

Linijka na samym dole jest w komentarzu, bo ona właśnie wywołuje wyjątek :/.

0

Literówki nie ma, jak widzisz w argumencie jest obIIIIekt o nazwie usi :). Nazywam je tak ponieważ takie nazwy są krótkie i nie wiem dlaczego, wiem co oznaczają :) (są to moje skróty). Bardzo prosiłbym o odpowiedzi na zadane przeze mnie pytanie :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1