Forum: Winsock, chars och nummerproblem!

Forum huvudsida -> Programmering -> Winsock, chars och nummerproblem!

Sidor: 1

Till botten

Mandy 00:32 - 8:e Juli 2010 | Post #1
Medlem
Inlägg: 2


Skicka PM
Hejhej!

Jag har precis börjat leka lite med winsock, och fick för mig att göra ett väldigt simpelt spel.

Nå, nu till mitt problem (Vilket förmodligen är väldigt lätt att lösa, men jag är en idiot)

Motståndarens position skickas hela tiden med send() i en whileloop.

Problemet jag stötte på var ju att den inte tar emot integers, utan endast char.

På klientens ände ser det ut så här:
  1. char p2pos[5] = "0 "; //Se fråga nummer två nedan, tack!
  2.  
  3. recv(Socket, p2pos, strlen(p2pos), 0);
  4. player.x = atoi(p2pos);

p2pos är alltså player2s X-position.

På serverns sida (Som också ska vara player1 senare) ser det ut så här: (Detta för att testa)
  1. while(1){
  2. int a = 0;
  3.  
  4. if(a > 998) {a = 1;}
  5. a++;
  6. char buffer[33];
  7. char *num = itoa(a, buffer, 10); //Gör om int a till char num
  8.  
  9. char *pos2 = num;
  10. send(Socket, pos2, strlen(pos2), 0);
  11. }


Nåja, hittils funkar allt.

Men väl överskridit 998gränsen på int A ska den gå tillbaka till 1.
På klientsidan visas då istället "199" och börjar räkna endast de första och skippar de som är efter int A.
Ex: 799, 899, 999, 109, 119


Min fråga i kort och gott, hur ska jag göra för att få den att gå tillbaka till ETT och inte ETT99 när den går under längden på char igen?

Fråga nummer två:
Texten jag strök under, högst upp i sourcekoden
char p2pos[5] = "0 ";
Måste jag göra så?
När jag försökte med endast 0 utan space efter, så gav den mig värdet "0ÿÿÿ", och det är ju inte så mysigt att försöka förvandla om till en int.
Och när jag istället försökte med att utelämna längden, 5an: char p2pos[] = "0" så funkade det inte att göra strängen längre så att säga.

Jag är verkligen urusel på att arbeta med chars har jag lärt mig av hela den här upplevelsen.

Jag hoppas att det inte var allt för jobbigt att dekryptera mitt konstiga sätt att fråga, är väldigt trött så mitt språk är väl inte på topp!
Och jag kan försäkra er om att jag har googlat, utan resultat.

Tack på förhand!



Edit:
Åh, ett till problem!
Om jag drar lite i rutan (Då stannar allt som pågår i den), så blandas p2pos ihop.
exempel:
163
164
165
1661
6716
8169


Senast redigerad 00:41 - 8:e Juli 2010


lambdakalkyl 01:47 - 8:e Juli 2010 | Post #2
Medlem
Inlägg: 3


Skicka PM
Om du bara vill skicka heltal och vet att server och klient alltid kommer att köras på maskiner med samma word size och endianness är det betydligt enklare att göra:
// på servern
int n = 100;
send(Socket, (char*)&n, sizeof(int), 0);

// på klienten
int n;
recv(Socket, (char*)&n, sizeof(int), 0);


Anyway, problemet du ser beror på att du inte skickar den avslutande -byten i strängen, det är också därför du måste ha med mellanslag i p2pos. För att fixa till detta kan du använda strlen(pos2)+1 som längd till send() istället för strlen(pos2).

Dock är din kod full av problem som antyder att du inte förstår pekare eller hur data lagras i datorns minne ordentligt. Om du envisas med att använda C eller C++ (vilket du inte borde eftersom C är värdelöst för allt utom systemprogrammering och C++ är värdelöst till allting utom bastardiserad halv-OOP där prestanda är det i särklass viktigaste) måste du ovillkorligen ha en bra förståelse för de sakerna, och du borde inte ge dig på sockets (eller någonting annat mer komplicerat än en länkad lista) förrän du känner dig helt säker på dem.

Jag skulle dock hellre rekommendera att börja med Haskell, Python eller något annat högnivåspråk istället.




Mandy 13:33 - 8:e Juli 2010 | Post #3
Medlem
Inlägg: 2


Skicka PM
Åh, tack så mycket. Du är min hjälte!




Sidor: 1

Forum huvudsida -> Programmering -> Winsock, chars och nummerproblem!
Atom feed

Du får inte posta i den här tråden | Till toppen