Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
Un notebook sviluppato in collaborazione con GoPro ma che risponde al meglio alle necessità di tutti coloro che creano contenuti video: robustezza, design, potenza di calcolo e funzionalità si abbinano al meglio tra di loro, pur se a prezzo di un costo elevato per via della tanta memoria onboard
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Ho affidato ai due modelli lo stesso mestiere ma non lo stesso identico prompt: trasformare una storia illustrata in un video usando una RTX 3090 e modelli locali. Ne sono usciti due film, due applicazioni e due idee opposte di efficienza. Fucina, progettata con Fable 5, colpisce di più nei primi secondi. Storyboard Studio, costruito con ChatGPT/Codex, regge meglio sulla distanza e vince il confronto complessivo, ma di stretta misura
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-11-2011, 18: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, 18: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 19:07.
guylmaster è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2011, 11: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


HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Google lancia Lyria 3.5: voci più natura...
Wuchang avrà un sequel: il creato...
Cassazione e smartphone: la conformit&ag...
Il chip più grande mai concepito?...
Microsoft perderebbe circa 150 dollari p...
Al via le spedizioni di HDD da oltre 50 ...
'Smettetela di uccidere internet': depos...
Google Pixel 11 sempre più vicino...
IBM raggiunge il vantaggio quantistico: ...
iPhone Air 256 GB in offerta: Apple sorp...
Clair Obscur: Expedition 33 potrebbe arr...
Earth Overshoot Day: cosa vuol dire che ...
Zscaler e Schwarz Group insieme per una ...
La rinascita di Winamp: accordo con Deez...
Battlefield 6 è un successo, il C...
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: 12:21.


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