Gå til innhold

Anbefalte innlegg

Jeg ønsker å sende en string vha socket. For så å sammenligne denne stringen med en annen string. Problemet mitt er når strenger blir overført til serveren blir den slik som dette: "OK......"

 

Her er litt av koden:

byte[] buffer = new byte[1024];

while (clSock.Receive(buffer) > 0)

{// Receive blocks until data arrives

string str = Encoding.ASCII.GetString(buffer);

.....

}

 

Jeg ønsker altså serveren å kunne se forskjell på ulike clienter. Får den inn "OK" skal den returnere noe, får den inn noe annet skal den lagre noe. Problemet mitt er altså å få serveren til å se forskjell på indataen jeg får.

 

P.S: Mista vist mye av spørsmålet mitt da jeg la det inn.

Endret av Saev
Lenke til kommentar
Videoannonse
Annonse

System.Text.Encoding.Unicode.GetBytes("Hello World!") henter alle bytes fra en unicode string.

 

edit: ah ok

 

Først og fremst ville jeg fortsatt brukt unicode istedet for ascii, men det spiller forsåvidt ingen rolle.

 

Har laget en HTTP sak fra bunden av, og stort sett så er det bare å parse data (men HTTP er litt dustete lagt opp)

 

f.eks.

 

StringBuilder inn_data = new StringBuilder();
byte[] buffer = new byte[1024];
while (clSock.Receive(buffer) > 0)
{// Receive blocks until data arrives
string str = Encoding.ASCII.GetString(buffer);
inn_data.Append(str);
}

string[] commands = inn_data.ToString().Split(';');
if(commands[0] == "OK")
 SendString(clSock, "Hello World!");
else if(commands[0] == "MSG")
 System.Windows.Forms.MessageBox.Show(commands[1]);

Endret av GeirGrusom
Lenke til kommentar
  • 2 uker senere...
Her er litt av koden:

byte[] buffer = new byte[1024];

while (clSock.Receive(buffer) > 0)

{// Receive blocks until data arrives

string str = Encoding.ASCII.GetString(buffer);

.....

}

 

Ta vare på returverdien fra Receive og plukk ut antall bytes som er returnert. Da skulle du slippe å bruke Split(), samt at hvis returverdi == bufferstørrelse så indikerer det at bufferet ditt er for lite / meldingen er splittet over flere pakker.

 

Omtrentlig kode:

while ((int c = clSock.Receive(buffer)) > 0)

{

string str = Encoding.ASCII.GetString(buffer, 0, c)

}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...