کار نکردن Thread
#1
Note 
سلام و خسته نباشید

من یک برنامه ساختم که با TCP ـه دات نت به سرور وصل میشه .
برنامه بدون استفاده از Thread به سروز وصل میشه اما هنگ میکنه !
با استفاده از thread هیچ کاری نمیکنه (هیچ پکتی دریافت نمیکنه)
چیکار کنم که هنگ نکنه و وصل بشه ؟

اینم کدهام >
[CSHARP]
TcpClient client = new TcpClient("localhost", 5222);
Toast.MakeText(this, "Connecting....", ToastLength.Short).Show();
if (client.Client.Connected)
{
string id = "myUser";
string password = "myPass";

string stream = "<streamConfusedtream to='localhost' xmlns='jabber:client' xmlnsConfusedtream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>" +
"<auth mechanism='PLAIN' xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>" + Convert.ToBase64String(Encoding.UTF8.GetBytes('\0' + id + '\0' + password)) + "</auth>";
client.Client.Send(Encoding.UTF8.GetBytes(stream));
}
new Thread(new ThreadStart(recive)).Start();
[/CSHARP]


[CSHARP]
private void recive()
{
try
{
while (client.Connected)
{
byte[] buffbyte = new byte[client.ReceiveBufferSize];
int i = client.Client.Receive(buffbyte);
if (i != 0)
{
if (i < buffbyte.Length)
{
byte[] buffbyte2 = new byte[i];
for (int b = 0; b < i; b++)
{
buffbyte2[b] = buffbyte[b];
}
buffbyte = buffbyte2;
}
string xml = Encoding.UTF8.GetString(buffbyte);
ReadXmlm(xml);
}
}
}

catch (Exception ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
}
}
[/CSHARP]



[CSHARP]
private void ReadXmlm(string xml)
{
xml = xml.Replace("'", "\"");
if (xml.IndexOf("success xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\"", System.StringComparison.OrdinalIgnoreCase) + 1 != 0)
{
client.Client.Send(Encoding.UTF8.GetBytes("<streamConfusedtream to='localhost' xmlns='jabber:client' xmlnsConfusedtream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>"));
}
else if (xml.IndexOf("xmlns=\"urn:ietf:params:xml:ns:xmpp-bind", System.StringComparison.OrdinalIgnoreCase) + 1 != 0 &&
xml.IndexOf("urn:ietf:params:xml:ns:xmpp-session", System.StringComparison.OrdinalIgnoreCase) + 1 != 0 &&
xml.IndexOf("</stream:features>", System.StringComparison.OrdinalIgnoreCase) + 1 != 0)
{
client.Client.Send(Encoding.UTF8.GetBytes("<iq id=\"njhh\" type=\"set\" to=\"localhost\"><bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"><resource>aaaaaaaa</resource></bind></iq>"));
}
else if (xml.IndexOf("</bind></iq>", System.StringComparison.OrdinalIgnoreCase) + 1 != 0)
{
client.Client.Send(Encoding.UTF8.GetBytes("<iq id=\"gggggggg\" type=\"set\" to=\"localhost\"><session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\" /></iq>"));
}
else if (xml.IndexOf("urn:ietf:params:xml:ns:xmpp-session", System.StringComparison.OrdinalIgnoreCase) + 1 != 0)
{
Toast.MakeText(this, "Connected", ToastLength.Short).Show();
client.Client.Send(Encoding.UTF8.GetBytes("<presence><status></status><priority>10</priority></presence>"));

}
else if (xml.IndexOf("xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\"><not-authorized", System.StringComparison.OrdinalIgnoreCase) + 1 != 0 &&
xml.IndexOf("</failure>", System.StringComparison.OrdinalIgnoreCase) + 1 != 0)
{
Toast.MakeText(this, "Wrong Us or Ps", ToastLength.Short).Show();
}
else if (xml.IndexOf("</streamConfusedtream>", System.StringComparison.OrdinalIgnoreCase) + 1 != 0)
{
Toast.MakeText(this, "DC", ToastLength.Short).Show();
}
}
[/CSHARP]

خوده فروم زامارین که جوابگو نیست ! شما کمک کنید

ممنون

See your dreams every where  and every time , try to remember your dreams because a man lives with his dreams forever
پاسخ
#2
Note 
در صورت امکان پروژه کامل بذار و کدهای اضافی رو پاک کن چون وقتی کسی میبینه اینهمه کد گذاشتی از جواب دادن منصرف میشه.
این کد:
[CSHARP]
client.Close();
[/CSHARP]
رو بذار بعد
[CSHARP]
string xml = Encoding.UTF8.GetString(buffbyte);
ReadXmlm(xml);
[/CSHARP]
احتمالا هنگ برنامه بخاطر اینه که شرط داخل حلقه while همیشه درسته.

پاسخ
#3
Note 
ممنون اما اگه سوکت بسته شه که هیچ پکتی (توی xmpp میگن xml) دریافت و یا ارسال نمیشه و آیدی از سرور دی سی شده!
توی سرور های ایکس ام پی پی همیشه باید سوکت متصل باشه !
این کد توی خوده سی شارپ(واسه ویندوز) کار میکنه و یکی از سریعترین راههای آنلاین شدن توی این سرورهاست و هنگ هم نمیکنه!
اما واسه اندروید (البته من توی Emulator امتحان کردم و روی گوشی امتحان نکردم چون نداشتم!) هنگ میکنه

بفرما اینم پروژه>
دانلود Android Application9 rar

و اگه سروری هم واسه امتحان میخواید>
server: miranda.im
user: pashmak
pass: 123456
(جای هرچی localhostـه بنویس miranda.im)

See your dreams every where  and every time , try to remember your dreams because a man lives with his dreams forever
پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

کاربرانِ درحال بازدید از این موضوع:   1 مهمان