webForumDet fria alternativet

Ta emot char

C/C++ur C/C++

5 svar · 333 visningar · startad av roj

Medlem sedan apr. 2002179 inlägg
Frågan#1
 char buffer[256];		

nret = recv(theClient,
	    buffer,
	    256,		
	    0);

Här tar jag emot en char som jag skickar från min client och lägger den i variabeln buffer. Men Problemet är ju att jag inte vet hur många tecken jag ska ta emot, vilket gör att jag får en char med massa blandad data från minnet i slutet. Någon som vet hur jag ska angripa problemet.. :l

Medlem sedan juni 200010 432 inlägg
#2

Låt den första postionen på strömmen med unsigned char vara antalet tecken. Dvs "buffert[0]=size_of_data" eller nåt. Behövs det mer än 1 byte för att representera storleken är det till att köra nästa index med. Då kan man trixa lite med memcpy och buffer[0-1] <-> short int ;)

Innan dess bör du ju då ha en fastställd buffert storlek på det du skickar och tar emot, på både mottagarsidan och sändarsidan.

Medlem sedan apr. 2002179 inlägg
#3

Okej det skulle funak ju.. Hade mina tankar åt det hållet men tänkte att det kanske fanns något lättare sätt.. Att lägga in ett tecken på slutet som anger var texten slutar är inte att rekomendera eller?

Medlem sedan juni 200010 432 inlägg
#4

Beror hur din kommunikation ser ut och om du använder protokoll (TCP, UDP).

Om du ska lägga in stopptecken bör du även ha starttecken. Dessa kan väljas till 0x01 och 0x02, vilka är mindre vanliga i själva dataströmmen. Problemet blir ju om det finns ett stopptecken ändå, insmyget i datamängden. Det kan du lösa genom att sätta nån form av kombination som stoppsekvens och låta en tillståndsmaskin kolla igenom hela dataströmmen efter just den kombinationen. Liknande kombinationer kan även symbolisera startsekvensen.

Hehe... nu är vi inne på ena delen av datalänklagret i OSI modellen :e

Men om det endast är tecken du ska skicka så ska det ju räcka med att ange hur många bytes som ska läsas och sen helt enkelt läsa så många och inte ett enda byte mer.

Medlem sedan apr. 2002179 inlägg
#5

Hmm kör nog på din version.. :) Det blir nog enklast så..

Medlem sedan juni 200010 432 inlägg
#6

Tilläggas kan att detta förutsätter en störningsfri kommunikation.
Dvs att din data inte blir korrupt, vilket isf skulle kunna sabotera de viktiga bytena med storleken och att du då tappar synkningen. Kör du med en socketuppkoppling ska det inte vara några problem då felkontrollen redan är gjord.

140 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)