Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale
La prima tappa italiana della Road to CES porta a Milano i vertici della Consumer Technology Association, con una nuova griglia di lettura dei trend tecnologici e una posizione netta su dazi e regolamentazione dell'IA
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
OPPO ha appena lanciato sul mercato la nuova serie Find X10, che ha come smartphone premium il Find X10 Pro Max, uno smartphone completo, che fa del comparto fotografico il suo vero punto di forza. Ma sono tante le novità, tra cui l'AI che adesso diventa agentica. Ma andiamo a vedere nel dettaglio questo nuovo smartphone.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-11-2011, 19:30   #1
guylmaster
Senior Member
 
L'Avatar di guylmaster
 
Iscritto dal: Aug 2002
Messaggi: 2518
[C] Problema di invio di stringhe tramite socket su MacOS

Salve a tutti,
ho un problema un pochino strano, dico così perchè il sorgente chi l'ha scritto sotto Windows non ha problemi, io che proseguio sotto MacOS invece lo rilevo.

Praticamente si parla di due progetti fatti su Eclipse (E compilato sotto windows con mingw e sotto MacOS con il compilatore suo) che si scambiano dei messaggi tramite socket tcp.

Quando il client si trova a dover leggere una stringa con spazi succede in poche parole che non legge la stringa, non me la chiede nemmeno, ed in un if di controllo lato server invece mi entra in un if che praticamente mi dice che la recv() mi restituisce -1 ovvero ha problemi con la ricezione (quando in realtà ancora non ho scritto nulla da inviarli).

Credo che sia un problema riguardante alla lettura della stringa in quanto me la invia senza manco scriverla. E credo che sotto windows tale lettura venga trattata diversamente ed ecco perchè il collega non ha problemi.

La parte di codice incriminata lato client è questa: Da notare che "Inserisci ecc ecc" appare a schermo, ma poi ho fatto varie prove sia con fgets che con gets ma non si ferma a leggere la scritta prosegue direttamente fino all'invio.

Codice:
printf("\nInserisci la prima operazione da compiere \n");
		//fflush(stdin);//svuta stdin
		//fgets( inputString, 80, stdin);
		gets( inputString);
		inputString[strlen(inputString)-1] = '\0';//rimuovi lo/n finale

		//splitta la stringa letta
		//e riempi la struttura del messaggio
		struct{
					int n1;
					int n2;
					char op[10];
				}msg;

		int numeri[2];
		int i=0;
		char *token;
		char *x="A";
		token = strtok(inputString, " ");
		//avvaloro il capo op di msg
		strcpy(msg.op,token);

		//printf("%s",msg.op);
		while (token != NULL){
			        //printf("The token is:  %s\n", token);
			        token = strtok(NULL," ");
			        numeri[i]=atoi(token);//converti ad int
			        i++;
		}



		//avvaloro i restanti campi della struct
		msg.n1=numeri[0];
		msg.n2=numeri[1];
		printf("\ninvio di %s, %d, %d", msg.op,msg.n1,msg.n2);

		//conversione da architettura dell'host a quella di rete
		msg.n1=htonl(msg.n1);
		msg.n2=htonl(msg.n2);


		if (send(Csocket, &msg, sizeof(msg), 0) <=0) {
			ErrorHandler("\nsend() sent a different number of bytes than expected\n");
			closesocket(Csocket);
			ClearWinSock();
			system("PAUSE");//per far vedere la schermata ed il messaggio di errore
			return -1;
		}
Lato server invece è questo il codice che riceve:
Codice:
struct{
				int n1;
				int n2;
				char op[10];
		} msg;
		int ricevuto;
		if ((ricevuto = recv(clientSocket, &msg, sizeof(msg), 0)) <= 0) {
			ErrorHandler("recv() failed or connection closed prematurely");
			closesocket(MySocket);
			ClearWinSock();
			system("PAUSE");//per far vedere la schermata ed il messaggio di errore
			return -1;
		}
Tra le varie prove se nell'if al posto di "<=" metto solo il minore stretto il programma lato server procede ma ricevendo "caratteri a cavolo" dalla memoria. Probabilmente non avvalora in nessun modo "msg" .

Quello che mi chiedo è come mai il server prosegue cosi? il client gli invia qualcosa pur non soffermandosi sulla gets o fgets? che poi sotto windows funge tutto e sotto MacOs no? Come risolvo?

Vi ringrazio in anticipo,
guylmaster.
guylmaster è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2011, 19:41   #2
guylmaster
Senior Member
 
L'Avatar di guylmaster
 
Iscritto dal: Aug 2002
Messaggi: 2518
Ho provato anche a sostituire la fflush() con:

Codice:
		while(getchar() != '\n');//svuota stdin
Ora lato client mi richiede di leggere la scritta ma dopo aver scritto la stringa e cliccato invio comunque il server si termina su quello stesso if riscontrando un errore nella ricezione.

Edit: facendo un pò di debug pare che la scritta da tastiera la legga correttamente, peccato che poi il server da errore nella ricezione.

Ultima modifica di guylmaster : 16-11-2011 alle 20:07.
guylmaster è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2011, 12:44   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Non ho letto il codice, così la butto la: che sia un problema di rappresentazione della "line termination"?
In Windows è un CR+LF, in MacOs è solo un LF...
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato WoW Forever provato: il MMORPG che la community ...
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita TCL P80 Ultra: con un display AMOLED opaco &egra...
Le due sonde spaziali della missione Spa...
LibreOffice accusa Microsoft: così OOXML...
Frontier impiega 7.536 GPU AMD per tracc...
I problemi di ULA Vulcan Centaur e il ri...
L'alta disponibilità è fac...
NetSuite affida agli agenti di IA il lav...
Gemini Notebook si gestisce dalla chat, ...
Pearla Revela è su Mac: foto e video sul...
Intel APX arriva su Windows 11, in attes...
Un file nella cartella Download pu&ograv...
DLSS 5 troppo pesante? Un modder trova i...
L'India punta sul metano: ISRO sviluppa ...
EA guarda al futuro: Star Wars Battlefro...
Nikkor Z 120-300mm f/2.8 atteso il 28-29...
Sviluppare con l'AI non significa softwa...
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:42.


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