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.
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 12 lat
- Postów:30
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 :/.
edytowany 2x, ostatnio: TheCCAY

- Rejestracja:około 17 lat
- Ostatnio:3 dni
- Lokalizacja:Wrocław
1
maszynaz napisał(a)
Twój kod to spagetti.

ha ha, 10/10
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 12 lat
- Postów:30
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 :).
edytowany 1x, ostatnio: ŁF