Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
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: 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, 15: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, 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: 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, 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: 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, 15: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, 15: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, 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: 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, 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


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Meno di 3kg per 'diventare' bionici: l'u...
Al regalo di San Valentino ci pensa HUAW...
Intel multata in India: 30 milioni di do...
Beast of Reincarnation ha una data di us...
Provati Reno15 e Reno15 FS: analisi comp...
L'Europa sfida la Cina sul litio: in Fin...
Sono 32, di cui 6 nuove, le offerte Amaz...
Rinnovo dei coupon Amazon nascosti: ecco...
Corsair aggiorna la confezione delle RAM...
Ecco tutti i robot aspirapolvere in offe...
Tachyum: dal processore universale alle ...
L'eVTOL tedesco per missioni mediche e m...
Zscaler Threat Report 2026: l'adozione d...
Claude AI minaccia omicidi e ricatti qua...
Dentro la gara: a Milano Cortina 2026 i ...
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: 14:41.


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