• کار نکردن 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 مهمان