Gå til innhold

C#: Socket Programmering, Trenger Tutorial.


Anbefalte innlegg

Heisann. jeg driver for tiden med komunikasjon i C# og har kommt et "langt" steg når det gjelder enveis kommunikasjon. men nå må jeg videre.

 

Jeg har letet en stund etter et FORKLARENDE tutorial på hvordan sockets fungerer og hvorfor det er slik der, uten hell. jeg lurer da på om dere har noen gode forslag til tutorials bøker innen dette?

 

 

TAKKER så mye..

Dryper

Lenke til kommentar
Videoannonse
Annonse
Heisann. jeg driver for tiden med komunikasjon i C# og har kommt et "langt" steg når det gjelder enveis kommunikasjon. men nå må jeg videre.

 

Jeg har letet en stund etter et FORKLARENDE tutorial på hvordan sockets fungerer og hvorfor det er slik der, uten hell. jeg lurer da på om dere har noen gode forslag til tutorials bøker innen dette?

 

 

TAKKER så mye..

Dryper

Socket er egentlig ikke så komplisert. Det finnes en del gode eksempler på MSDN som du bør kunne få noe ut av. Det som gjør dette litt mere komplisert for deg etter hvert er at du vil trenge å tenke asynkron komunikasjon fordi når du setter igang en socket så tar den over tråden din. Det er fordi den er en loop som leser nettet ditt. Det betyr at programmet ditt oppfører seg som om det går i heng. Løsningen er grei nok, det er bare å sparke igang en ny tråd som denne "løkka" jobber på og dermed kan du fortsette andre rutiner. Men som sagt, sjekk MSDN så finner du masse eksempler på socket programmering.

 

Du kan også jukse litt ved å dra inn WinSock v6 som en komponent. Men jeg misstenker at denne blir borte fra Windows før eller siden. WinSock6 er en OCX som er utrolig enkel å kode mot

Lenke til kommentar

Jeg bør vel egentlig lære meg det som er "inn" .. kan jo gi et lite eks av det jeg ikke fatter.

 

//Type

byte [] buffer = new byte [4];
buffer = BitConverter.GetBytes((int)cmd.CommandType);
this.networkStream.Write(buffer , 0 , 4);
this.networkStream.Flush();

//Sender IP

byte [] senderIPBuffer = 
 Encoding.ASCII.GetBytes(cmd.SenderIP.ToString());
buffer = new byte [4];
buffer = BitConverter.GetBytes(senderIPBuffer.Length);
this.networkStream.Write(buffer , 0 , 4);
this.networkStream.Flush();
this.networkStream.Write(senderIPBuffer, 0, 
						   senderIPBuffer.Length);
this.networkStream.Flush();

//Sender Name

byte [] senderNameBuffer = 
  Encoding.Unicode.GetBytes(cmd.SenderName.ToString());
buffer = new byte [4];
buffer = BitConverter.GetBytes(senderNameBuffer.Length);
this.networkStream.Write(buffer , 0 , 4);
this.networkStream.Flush();
this.networkStream.Write(senderNameBuffer, 0, 
						   senderNameBuffer.Length);
this.networkStream.Flush();

//Target

byte [] ipBuffer = 
 Encoding.ASCII.GetBytes(cmd.Target.ToString());
buffer = new byte [4];
buffer = BitConverter.GetBytes(ipBuffer.Length);
this.networkStream.Write(buffer , 0 , 4);
this.networkStream.Flush();
this.networkStream.Write(ipBuffer , 0 , ipBuffer.Length);
this.networkStream.Flush();

//Meta Data.

if ( cmd.MetaData == null || cmd.MetaData == "" )
cmd.MetaData = "\n";

byte [] metaBuffer = 
	  Encoding.Unicode.GetBytes(cmd.MetaData);
buffer = new byte [4];
buffer = BitConverter.GetBytes(metaBuffer.Length);
this.networkStream.Write(buffer , 0 , 4);
this.networkStream.Flush();
this.networkStream.Write(metaBuffer, 0, metaBuffer.Length);
this.networkStream.Flush();

 

 

Dette er noe jeg fant på CodeProject. og her er det et par tulleting jeg ikkje skjønner...

 

byte []

metaBuffer =

buffer = BitConverter.GetBytes(ipBuffer.Length);

 

EDIT: alt med buffer i det heletatt

 

Hva vil disse si? hvorfor byte? hva skal det være godt for? og meta buffer.. hva er dette.

 

Takker

Dryper

Endret av Dryper
Lenke til kommentar
Jeg bør vel egentlig lære meg det som er "inn" .. kan jo gi et lite eks av det jeg ikke fatter.

....

byte []

metaBuffer =

buffer = BitConverter.GetBytes(ipBuffer.Length);

 

EDIT: alt med buffer i det heletatt

 

Hva vil disse si? hvorfor byte? hva skal det være godt for? og meta buffer.. hva er dette.

 

Takker

Dryper

Vell, [] betyr en array og som du sikkert vet så jobber en datamaskin med nuller og enere (binære tall). I en BYTE er det plass til 8 BIT og en BYTE kan holde et hvilket som helst tall mellom 0 og 255. Det finnes ikke noe som heter bokstaver for en datamaskin. En STRING f.eks. er jo bare en stor samling av tall. A = 65, B = 66, C = 67 o.s.v.

 

Et buffer er bare et mellomlagrings område der du kan skrive og lese data som skal sendes eller mottas.

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å
×
×
  • Opprett ny...