Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-08-2006, 13:49   #1
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
[c++]chiarificazione char e *BYTE

allora devo avere una chiarificazione riguardo a char e *BYTE

un char è un insieme di byte dove char[1] è = 1 byte ovvero 8 bit... ok

sto sviluppando con winsock e invio per ora delle stringhe tipo:

char buf[512]="invio della stringa";
send(client[i].clientSocket,buf,(int)strlen(buf),0);
o anche
send(client[i].clientSocket,buf, sizeof(buf),0);

con questo sopra invio una sequenza di byte contenuti nel char buf... ok

ho sviluppato con Directplay e c'è una funzione che è:
DPN_BUFFER_DESC è un typedef della lib di directplay

nel mio programma sviluppato invece per winsock non posso usare questo typedef e vorrei fare una cosa simile per l'invio dei dati tramite winsock.

perchè dico questo perchè non devo inviare stringhe di char (cosa che ho fatto per provare il winsock) ma nell'invio dei dati in quell'unico send devo inviare una struttura tipo:

il dato inviato deve contenere il nome del player + una struttura che ne so per esempio la posizione di una matrice e anche altri dati.

con directplay si usa inviare dati così:

GAMEMSG_OKAY msgOkay;
msgOkay.idN = pMsg->idN; //numero id del player
lstrcpy( msgOkay.nome, pMsg->nome ); //nome del player
t_bikeData data; //struttura dati (float delle posizioni delle ruote)
msgOkay.Data = pMsg->Data; //posizioni delle ruote

DPN_BUFFER_DESC bufferDesc;
bufferDesc.dwBufferSize = sizeof(GAMEMSG_OKAY);
bufferDesc.pBufferData = (BYTE*) &msgOkay;
//invio dati
g_pDPClient->Send( &bufferDesc,...

ora tornando alla classica stringa da inviare con il winsock:

char buf[512]="invio della stringa";
send(client[i].clientSocket,buf,(int)strlen(buf),0);

ecco con questo sopra invio la stringa "invio della stringa"

mentre a me servirebbe sapere come eseguire il procedimento delle Directplay per il winsock così da inviare dati come BYTE e non char in quanto non devo appunto inviare solo una stringa di char

spero di essermi spiegato.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 13:57   #2
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
ho fatto delle prove per ora mi rispondo da solo... ma devo verificare:

buf = (BYTE*) &msgOkay; //struttura dati non arbitrari
send ((SOCKET), &buf, sizeof(GAMEMSG_OKAY), 0))

... vediamo
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:05   #3
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
char, BYTE.... ma qual'è il tuo dubbio che non ho capito?
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:07   #4
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
Quote:
Originariamente inviato da okay

un char è un insieme di byte dove char[1] è = 1 byte ovvero 8 bit... ok
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:11   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Nota, in Win32, BYTE è un typedef per unsigned char. Quindi, a parte la questione del segno, un BYTE è un char.

Puoi fare senza problemi:
Codice:
GAMEMSG_OKAY gmo;
...
send (socket, (const char*) &gmo, sizeof(GAMEMSG_OKAY), 0);
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:13   #6
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
Quote:
Originariamente inviato da okay

char buf[512]="invio della stringa";

send(client[i].clientSocket,buf,(int)strlen(buf),0);
o anche
send(client[i].clientSocket,buf, sizeof(buf),0);
bè, non è proprio la stessa cosa... uno è la lunghezza della stringa, l'altro la dimensione...
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:15   #7
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da andbin
Nota, in Win32, BYTE è un typedef per unsigned char. Quindi, a parte la questione del segno, un BYTE è un char.

Puoi fare senza problemi:
Codice:
GAMEMSG_OKAY gmo;
...
send (socket, (const char*) &gmo, sizeof(GAMEMSG_OKAY), 0);

guarda ho fatto così ...

Codice HTML:
		DWORD dwBuffer;
		GAMEMSG_OKAY msgOkay;
        msgOkay.dwType = GAME_MSGID_OKAYIT;
	    msgOkay.idN = idN;
		dwBuffer = (BYTE*) &msgOkay;
send (client[i].clientSocket, &dwBuffer, sizeof(GAMEMSG_OKAY), 0);
...sto provando ma ho errori cmq ci dovrei essere.

grazie adesso integro il tuo code in attesa del giudizio per quello sopra...
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:16   #8
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
Quote:
Originariamente inviato da okay

un char è un insieme di byte dove char[1] è = 1 byte ovvero 8 bit... ok
char, BYTE, è sempre la stessa cosa e non c'è bisogno che sposti la struttura in un buffer, fai un cast della struttura passandogli l'indirizzo e il sizeof della struttura
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:19   #9
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
DWORD dwBuffer;
GAMEMSG_OKAY msgOkay;
msgOkay.dwType = GAME_MSGID_OKAYIT;
msgOkay.idN = idN;
dwBuffer = (BYTE*) &msgOkay;
send (client[i].clientSocket, &dwBuffer, sizeof(GAMEMSG_OKAY), 0);
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:22   #10
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
Quote:
Originariamente inviato da okay
guarda ho fatto così ...

Codice HTML:
		DWORD dwBuffer;
		GAMEMSG_OKAY msgOkay;
        msgOkay.dwType = GAME_MSGID_OKAYIT;
	    msgOkay.idN = idN;
		dwBuffer = (BYTE*) &msgOkay;
send (client[i].clientSocket, &dwBuffer, sizeof(GAMEMSG_OKAY), 0);
...sto provando ma ho errori cmq ci dovrei essere.

grazie adesso integro il tuo code in attesa del giudizio per quello sopra...
perché nong uradi Okay che te l'ha fatto in una riga?
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:45   #11
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Marco Giunio Silano
perché nong uradi Okay che te l'ha fatto in una riga?

si infatti và bene...l'avevo visto:

Codice HTML:
		GAMEMSG_OKAY msgOkay;
        msgOkay.dwType = GAME_MSGID_OKAYIT;
	    msgOkay.idN = idN;
send (client[i].clientSocket, (const char*) &msgOkay, sizeof(GAMEMSG_OKAY), 0);
grande grazie
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 14:54   #12
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
volevo provare una cosa così ma non và:

BYTE* Buffer;
Buffer = (BYTE*) &msgOkay;
send (client[i].clientSocket, &Buffer, sizeof(GAMEMSG_OKAY), 0);

solo per curiosità...

così invece va bene:

BYTE* Buffer;
Buffer = (BYTE*) &msgOkay;
send (client[i].clientSocket, (const char*) &Buffer, sizeof(GAMEMSG_OKAY), 0);
... sempre (const char*) bisogna mettere


mentre in DP si usa:
g_pDPServer->SendTo( DPNID_ALL_PLAYERS_GROUP, &bufferDesc
... senza il (const char*)

probabilmente perchè &bufferDesc proviene dal typedef della lib delle DirectPlay



và bhe...! se non posso togliere il (const char*)... pazienza

Ultima modifica di okay : 02-08-2006 alle 15:07.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 15:26   #13
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
ora stavo provando la ricezione del const char*:

Codice HTML:
int bytes;
 bytes = recv(client[i].clientSocket, (const char*) &msgOkay, sizeof(GAMEMSG_OKAY), 0);
            if( (&msgOkay < sizeof(GAMEMSG_GENERIC) )
                break;
            GAMEMSG_GENERIC* pMsg = (GAMEMSG_GENERIC*) &msgOkay;
			if( pMsg->dwType == GAME_MSGID_OKAYIT ){

			}
come fare per riprendere i byte nella ricezione e gestirli??


ho fatto così e compila bene:
Codice HTML:
char* rec;
int bytes;
 bytes = recv(client[i].clientSocket, rec, sizeof(GAMEMSG_OKAY), 0);
            if( (sizeof(rec)) < sizeof(GAMEMSG_GENERIC) )
                break;
            GAMEMSG_GENERIC* pMsg = (GAMEMSG_GENERIC*) &msgOkay;
			if( pMsg->dwType == GAME_MSGID_OKAYIT ){

			}
che ne pensate???

Ultima modifica di okay : 02-08-2006 alle 15:30.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 15:46   #14
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 908
bè, che compila non significa che sia giusto. non ho sottomano nulla, com'è il propotipo della funzione?
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 16:02   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da okay
volevo provare una cosa così ma non và:

BYTE* Buffer;
Buffer = (BYTE*) &msgOkay;
send (client[i].clientSocket, &Buffer, sizeof(GAMEMSG_OKAY), 0);

solo per curiosità...

così invece va bene:

BYTE* Buffer;
Buffer = (BYTE*) &msgOkay;
send (client[i].clientSocket, (const char*) &Buffer, sizeof(GAMEMSG_OKAY), 0);
... sempre (const char*) bisogna mettere
Nessuna delle 2 va bene!!! In Buffer metti l'indirizzo della struttura (e fin qui ok) ma poi alla send passi l'indirizzo di Buffer! Che è sbagliato, devi passare il contenuto di Buffer che è l'indirizzo della struttura!

Quindi al massimo puoi fare:

send (client[i].clientSocket, (const char*) Buffer, sizeof(GAMEMSG_OKAY), 0);

senza &!!

In ogni caso puoi anche evitare di passare per un BYTE*.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 16:17   #16
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da andbin
Nessuna delle 2 va bene!!! In Buffer metti l'indirizzo della struttura (e fin qui ok) ma poi alla send passi l'indirizzo di Buffer! Che è sbagliato, devi passare il contenuto di Buffer che è l'indirizzo della struttura!

Quindi al massimo puoi fare:

send (client[i].clientSocket, (const char*) Buffer, sizeof(GAMEMSG_OKAY), 0);

senza &!!

In ogni caso puoi anche evitare di passare per un BYTE*.

si andbin è giusto come dici.... infatti il send è OK.

adesso invece per la recv:

Non ho errori di compilazione ma ho un errore quà:
if( pMsg->dwType == GAME_MSGID_OKAYIT ){

se mi aiuti forse ci riesco il problema non è di codice ma di struttura dunque per la ricezione di quella const char* benedetta inviata (i dati inviati sono giusti idN = 0 e mess = "okay")

ricezione:

Codice HTML:
char *rec;
int bytes;
 bytes = recv((SOCKET)wParam, rec, sizeof(GAMEMSG_OKAY), 0);
 if( (sizeof(rec)) < sizeof(GAMEMSG_GENERIC) )
				    return TRUE;
 

 GAMEMSG_GENERIC* pMsg = (GAMEMSG_GENERIC*) sizeof(rec);

	if( pMsg->dwType == GAME_MSGID_OKAYIT ){
	if( (sizeof(rec)) != sizeof(GAMEMSG_OKAY) )
                     return TRUE;
				
            GAMEMSG_OKAY* pMsg = (GAMEMSG_OKAY*) sizeof(rec);

	    idN = pMsg->idN; //recupero i dati della struct
	lstrcpy(NomePlayer, pMsg->mess);//nome player "okay" per provare
			}
ho cambiato con
char rec[512];

ma ho l'errore in quell'if

ora faccio altre prove
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 16:27   #17
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
primo errore corretto:

char rec[512];
e
GAMEMSG_GENERIC* pMsg = (GAMEMSG_GENERIC*) &rec;


L' ULTIMO ERRORE da correggere è:
if( (sizeof(rec)) != sizeof(GAMEMSG_OKAY) )

cioè non è un errore ma esce dall'if

Ultima modifica di okay : 02-08-2006 alle 16:29.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 16:46   #18
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
funziona tutto
però ho dovuto togliere il controllo se la dimensione è uguale alla struttura questo per i malintezionati che con un tool o telnettando si posso loggare conoscendo la porta e l'ip e inviare dei dati fasulli facendo collassare il server.

quindi mettendo che i dati arrivati corrispondono ai dati della struttura, accetta la rec, se non esci.

if( (sizeof(rec)) < sizeof(GAMEMSG_GENERIC) )
return TRUE;

questo sopra passa

if( (sizeof(rec)) != sizeof(GAMEMSG_OKAY) )
return TRUE;

questo sopra non passa ed esce... strano

se commento questo
// if( (sizeof(rec)) != sizeof(GAMEMSG_OKAY) )
// return TRUE;

idN = pMsg->idN;
lstrcpy(NomePlayer, pMsg->mess);
E' PERFETTO idN=0 e mess="okay"

anche

if( pMsg->dwType == GAME_MSGID_OKAYIT )

vale 10 come la define GAME_MSGID_OKAYIT
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 16:51   #19
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Che coglione

l'avevo pure messa per usarla e invece come al solito.........

corretto:

int bytes;
bytes = recv((SOCKET)wParam, rec, sizeof(GAMEMSG_OKAY), 0);
if( (bytes) < sizeof(GAMEMSG_GENERIC) )
...
if( (bytes) != sizeof(GAMEMSG_OKAY) )

ora è okay

grazie amici
okay è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
Eni porta la produzione di batterie in I...
Il Dipartimento dell'Energia USA cancell...
MSI è pronta per le DDR5 cinesi a...
La sonda spaziale JAXA Hayabusa2 ha sorv...
L'Università di Sydney e IBM scop...
Credono di parlare con Microsoft e l'FTC...
Microsoft vede grandi profitti nella con...
Niente 'scatola vuota': ecco perch&eacut...
Microsoft annuncia 4800 licenziamenti: X...
Sky acquisisce la divisione media di ITV...
Chi studia con ChatGPT poi dimentica qua...
Nikon avrebbe due piani per la prossima ...
Falla in YouTube Studio: un commento e i...
In Italia sono già 200 i data center att...
SIHOO B100 torna in offerta a 169€ su Am...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v