Gå til innhold

Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet (endret)

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
Skrevet (endret)

Funka gitt, bare at jeg måtte bruke

 

string[] commands = inn_data.ToString().Split('\ 0');

 

thx :) Merka net at forumet ikke liker \ 0 uten whitespace :p Det som var problemet mitt i koden også

Endret av Saev
Skrevet

ja hvordan du formaterer stringen spiller forsåvidt ingen rolle.

Jeg valgte semikolon fordi det sjeldent inngår i inndata.

HTTP bruker mellomrom på headeren, som kan skape problemer.

én av flere dustete ting med HTTP.

  • 2 uker senere...
Skrevet
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)

}

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...