Saev Skrevet 5. februar 2008 Rapporter Del Skrevet 5. februar 2008 (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 5. februar 2008 av Saev Lenke til kommentar
GeirGrusom Skrevet 5. februar 2008 Rapporter Del Skrevet 5. februar 2008 (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 5. februar 2008 av GeirGrusom Lenke til kommentar
Saev Skrevet 6. februar 2008 Forfatter Rapporter Del Skrevet 6. februar 2008 (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 Det som var problemet mitt i koden også Endret 6. februar 2008 av Saev Lenke til kommentar
GeirGrusom Skrevet 6. februar 2008 Rapporter Del Skrevet 6. februar 2008 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. Lenke til kommentar
dchr Skrevet 15. februar 2008 Rapporter Del Skrevet 15. februar 2008 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå