C# TCP Verzenden & Ontvangen Client Probleem

Status
Niet open voor verdere reacties.

cuperus

Gebruiker
Lid geworden
2 nov 2010
Berichten
43
Zoals u kon zien in http://www.helpmij.nl/forum/showthread.php/651377-C-Socket-verzenden-en-ontvangen-sluit-probleem had ik problemen met de server maar op dit moment met de client.

Het probleem is dat als ik de data binnen krijg en ik wil een if doen bv.

Code:
if (returndata == "0x0000,lnrspns,SUCCESS")
{
MessageBox.Show("LOLLED");
}
else
{
MessageBox.Show("YAAAAAAAAAAAA");
}

dat de if niet werkt!

de gehele client code is:

Code:
private void loginBtn_Click(object sender, EventArgs e)
        {
            NetworkStream serverStream = clientSocket.GetStream();
            byte[] outStream = System.Text.Encoding.ASCII.GetBytes("0x0000,lnchk," + usernameTxtbox.Text + "," + passwordTxtbox.Text + ",EP$");
            serverStream.Write(outStream, 0, outStream.Length);
            serverStream.Flush();

            byte[] inStream = new byte[10025];
            serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
            string returndata = System.Text.Encoding.ASCII.GetString(inStream);
            // ALMOST FINISHED!

            MessageBox.Show(Convert.ToString(returndata.Length));

            if (returndata == "0x0000,lnrspns,SUCCESS")
            {
                MessageBox.Show("LOLLED");
            }
            else
            {
                MessageBox.Show("YAAAAAAAAAAAA");
            }
            MessageBox.Show(returndata);
        }


Ik hoop dat jullie me kunnen helpen (alweer)

MVG Kevin
 
Hey,

wat je kan proberen is eens te kijken wat er in returndata komt te zitten door een break-point te plaatsen. Dan kun je zien wat er precies inzit, en eventueel naar het klembord kopieëren.

Wat ik denk dat het is, is dat de GetString(inStream) methode de hele byte[] omzet naar tekst. Zelfs de lege positites. Je dient dus bij de serverStream.Read() de returnvalue (int) op te slaan, en als lengte mee te geven aan de GetString methode.

En een tip
Vervang ook de
Code:
if (returndata == "0x0000,lnrspns,SUCCESS")
naar
Code:
if (returndata.Equals("0x0000,lnrspns,SUCCESS"))
Om tekst te vergelijken mag je eigenlijk niet de == gebruiken omdat deze referenties controlleerd. Misschien dat dat het probleem al is.
Om dat duidelijker te maken:
Code:
//WERKT WEL
string value = "test";
if (value == "test") {}

// WERKT NIET
string value = new string("test");
if (value == "test") {}

Equals daarin tegen controlleerd de inhoud van de tekst en niet de referenties.

Succes,
Mathijs
 
Laatst bewerkt:
Ik heb respect voor u!
Ik heb breakpoint gedaan en toen zag ik dat er vaak \0 stond! dus die heb ik ff verander door een replace optie erneer te zetten:)
en nu werkt het :D

DANK U WEL
 
De replace functie zou ik niet gebruiken.. Want misschien gaan er dan gegevens verloren die je niet wilt verliezen.
Gebruik die 2e manier die ik zei door de lengte mee te geven bij GetString(). Dat is een manier die er officieel voor gemaakt is.
Maar mooi dat iig het probleem duidelijk is.

Gr
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan