Forum huvudsida -> Programmering -> Winsock, chars och nummerproblem!
Sidor: 1
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:
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)
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!
Du får inte posta i den här tråden | Till toppen
Datum
2024-12-22 15:41
Vecka: 51
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.