Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-08-2006, 14: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, 14: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, 15:05   #3
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
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, 15:07   #4
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
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, 15:11   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 15:13   #6
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
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, 15: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, 15:16   #8
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
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, 15:19   #9
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
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, 15:22   #10
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
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, 15: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, 15: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 16:07.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 16: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 16:30.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 16:46   #14
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
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, 17:02   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 17: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, 17: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 17:29.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2006, 17: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, 17: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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
E-bike illegali, a Verona il più ...
Quali sono i giochi più venduti su Steam...
HONOR sta per lanciare un nuovo smartpho...
Jared Isaacman sarà alla guida de...
Il Tesla Cybertruck non arriverà ...
Xiaomi Watch 5 è ufficiale: architettura...
CD Projekt vende GOG: il co-fondatore Mi...
Il meglio di Amazon in 26 prodotti, aggi...
L'Europa fa retromarcia sulle pompe di c...
Google investe 4,75 miliardi per i data ...
Meta accelera sullintelligenza artificia...
Il TV QLED TCL da 65'' costa solo 399€ s...
La rivoluzione delle batterie 4680 di Te...
Mini aspiratore a batteria per auto e no...
Konami punta a pubblicare un nuovo gioco...
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: 13:06.


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