Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-12-2013, 12:12   #1
domberti
Junior Member
 
Iscritto dal: Dec 2013
Messaggi: 10
Problema Applicazione Client Server c++

Salve a tutti. Ho sviluppato una banalissima applicazione client server.

Il problema è che la connect nel client mi restituisce -1, quindi un errore (errno=58), mentre dal lato server la accept restituisce (0) e riesco a vedere l'indirizzo del client che ha richiesto la connessione come se la connessione la avesse stabilita. Tuttavia essendo che la connect al client abbia restituito errore, credo proprio la connessione stabilita non sia, difatti la applicazione server non riesce poi ad eseguire la recv().

Quale potrebbe essere l'origine del problema? E quale la soluzione? Grazie.

Ultima modifica di domberti : 13-12-2013 alle 12:39.
domberti è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2013, 13:42   #2
airon
Senior Member
 
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
Senza codice, chi lo sa, mica siamo indovini.
airon è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2013, 13:54   #3
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3984
ci sarà il firewall in mezzo che rompe gli zebedei
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2013, 13:56   #4
domberti
Junior Member
 
Iscritto dal: Dec 2013
Messaggi: 10
Scusami per la omissione. In ogni modo il server è sul PC in ambiente windows, il client su un microprocessore alloggiato su un dispositivo di sincronizzazione IEEE1588.

========================================================
SERVER
========================================================

Codice:
#include <iostream>
#include <winsock.h>

    
using namespace std;
int main(int argc, char *argv[]) 
{
    int listenSocket;
    int remoteSocket;
    SOCKADDR_IN Server_addr;
    SOCKADDR_IN Client_addr;
    int sin_size;
    short port;
     
    char buffer[256];
     
    int wsastartup;
    int ls_result;
    WORD wVersionRequested = 0x0202;
    WSADATA wsaData;
    wsastartup = WSAStartup(wVersionRequested, &wsaData);
    if (wsastartup != NO_ERROR) printf ("Errore WSAStartup()\n\n");
    listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (listenSocket < 0) printf ("Server: errore nella creazione del socket.\n\n");
    else printf ("Creazione server socket correttamente effettuata: socket pronta.\n\n");
    port = 6000;
     
    Server_addr.sin_family = AF_INET;
    Server_addr.sin_addr.s_addr = inet_addr("169.254.142.1");//inet_addr() converte una stringa contenente un indirizzo IP nella forma opportuna per essere memorizzato nella struttura in_addr.
    Server_addr.sin_port = htons(port);
     
     if (bind(listenSocket,(LPSOCKADDR) &Server_addr,sizeof(struct sockaddr)) < 0) 
     {
        printf ("bind() fallita.\n\n");
        closesocket(listenSocket);
        system("pause");
        return -1;
     }
     int rec;   
     ls_result = listen(listenSocket, SOMAXCONN);
     if (ls_result < 0) printf ("Il server non riesce a mettersi in attesa...\n\n");
     else printf ("Server in attesa di connessione...\n\n"); 
     sin_size = sizeof(struct sockaddr_in);
     
     while (1)
     {         
               printf ("\nwhile..."); 
               remoteSocket = accept(listenSocket, (struct sockaddr *) &Client_addr, &sin_size);
               printf ("remote socket= %d.\n", remoteSocket);
               printf ("Connessione al client (IP: %s; PORTA: %d)  avvenuta con successo",inet_ntoa(Client_addr.sin_addr),ntohs(Client_addr.sin_port));  
               printf ("\nremote socket= %d.\n", remoteSocket);
               rec=recv(remoteSocket, buffer, sizeof(buffer), 0);
               printf("\nREC= %d ; errno= %d.", rec, errno);
               printf ("\n\nL'identificatore della socket remota e': %d", remoteSocket);
               printf ("\n\nMessaggio Arrivato: %s",buffer);
               printf ("\n\nIl server sta per essere chiuso.\n\n");
     }
     WSACleanup();
     
     system("pause");
     return 0;
}
=========================================================
CLIENT
=========================================================
Codice:
#include <socket.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>




int iprintf(const char *format, ...);
   

void sample_c_program(void)
	{  


    char messaggio[4]="ciao";
    iprintf("Benvenuto!\n");
    short port;
    int clientsocket;
    struct sockaddr_in addr;

	port=6000;
    addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = inet_addr("169.254.142.1");
    addr.sin_port = htons(port);

    clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   /* if (clientsocket<0)
		{
		iprintf("Errore nella funzione socket(): %ld\n", errno);
	//	return;
		}						 */
    iprintf("L'identificatore della socket del client è: %d \n", clientsocket);	  

    int con=-1;
/*	while (con<0)
    	con=connect(clientsocket, (struct sockaddr*) &addr, sizeof(addr));  
    iprintf("vediamo un po");	   	  */
	if(connect(clientsocket, (struct sockaddr*) &addr, sizeof(addr))<0)
    {
     	iprintf("Errore %d nella connessione con il Server.\n", errno);
	  //  closesocket(clientsocket);
	  //  return;
    }			  			   
    	   
	int bytesSent;
  
    bytesSent=send(clientsocket, messaggio, sizeof(messaggio), 0);
    printf( "\n\nBytes Sent: %ld\n", bytesSent );

//	shutdown(clientsocket,2);
//	closesocket(clientsocket);
    
	return;	

}

Ultima modifica di domberti : 15-12-2013 alle 02:13.
domberti è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2013, 14:01   #5
domberti
Junior Member
 
Iscritto dal: Dec 2013
Messaggi: 10
Quote:
Originariamente inviato da bancodeipugni Guarda i messaggi
ci sarà il firewall in mezzo che rompe gli zebedei

Grazie per la risposta ma credo proprio che il problema non sia semplicemente questo giacché con client su un altro PC anziché sul modulo di sincro non ho problemi ed in più ho anche disabilitato il firewall.
domberti è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2013, 14:50   #6
airon
Senior Member
 
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
Il codice mi sembra corretto ad una letta veloce. L'unica cosa strana sono gli IP coinvolti...

169.254.142.1

Sono classi IP riservate a quando un apparato si autoassegna un IP perchè ci sono conflitti sulla rete / problemi di subnet o se son settati in DHCP non riescono a prendere l'ip...
Verifica la conf di rete

Ultima modifica di airon : 13-12-2013 alle 14:52.
airon è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2013, 15:06   #7
domberti
Junior Member
 
Iscritto dal: Dec 2013
Messaggi: 10
Quote:
Originariamente inviato da airon Guarda i messaggi
Il codice mi sembra corretto ad una letta veloce. L'unica cosa strana sono gli IP coinvolti...

169.254.142.1

Sono classi IP riservate a quando un apparato si autoassegna un IP perchè ci sono conflitti sulla rete / problemi di subnet o se son settati in DHCP non riescono a prendere l'ip e se ne autoassegnano uno..
Sono gli IP statici impostati in LAN.

Se la connect lato client da errore, perché la accept lato server non lo da?

L'errore è ESHUTDOWN. Quindi credo sia la socket del client ad andare in shutdown.
Cosa strana:

Lancio l'applicazione server, poi lancio la applicazione client e il server pare ad esso connettersi, difatti la accept non da errore ed in più il server riesce a leggere correttamente IP e porta del chiamante. Poi non riesce a effettuare la recv() e rimane in attesa. Dal lato client intanto la connect() aveva restituito "-1".

Se poi lascio aperta l'app client e riavvio l'applicazione server, riesce a fare la recv() restituendo però errore.

Ultima modifica di domberti : 13-12-2013 alle 16:13.
domberti è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2013, 17:18   #8
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3984
hai provato a fare un codice di prova invia e ricevi su quel particolare client ?

giusto per sincerarsi che i driver di base funzionino
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2013, 13:27   #9
domberti
Junior Member
 
Iscritto dal: Dec 2013
Messaggi: 10
Quote:
Originariamente inviato da bancodeipugni Guarda i messaggi
hai provato a fare un codice di prova invia e ricevi su quel particolare client ?

giusto per sincerarsi che i driver di base funzionino
Il problema è già sulla connect() per cui...
domberti è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2013, 14:01   #10
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3984
allora ci sono i driver che non vanno
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2013, 14:37   #11
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da domberti Guarda i messaggi
Salve a tutti. Ho sviluppato una banalissima applicazione client server.

Il problema è che la connect nel client mi restituisce -1, quindi un errore (errno=58), mentre dal lato server la accept restituisce (0) e riesco a vedere l'indirizzo del client che ha richiesto la connessione come se la connessione la avesse stabilita. Tuttavia essendo che la connect al client abbia restituito errore, credo proprio la connessione stabilita non sia, difatti la applicazione server non riesce poi ad eseguire la recv().

Quale potrebbe essere l'origine del problema? E quale la soluzione? Grazie.
La prima cosa da fare e' capire che errore viene ritornato al client. Ho provato a guardare cosa vuol dire errno=58 ma non ho trovato nulla per cui meglio seconverti il codice di errore in stringa "umana" con strerror e lo stampi a video.
Da li' si potra' capire la causa dell'error.
Altre due osservazioni: quando posti il codice usa il tag [ code ], in questo modo verra' indentato come si deve, infine ci sono un po' di errori qua e la' nel codice.
Due che ho visto al volo: la stringa "ciao" e' lunga cinque caratteri, la stai mettendo in un array da quattro; inoltre non e' buona cosa stampare a video un intero con "%ld", e' pensata per i long. In una macchina a 32bit non cambia nulla, in una a 64bit invece si'.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2013, 15:53   #12
domberti
Junior Member
 
Iscritto dal: Dec 2013
Messaggi: 10
Quote:
Originariamente inviato da marco.r Guarda i messaggi
La prima cosa da fare e' capire che errore viene ritornato al client.
L'errore è errno=58 can't send cause socket shutdowh;


Quote:
Originariamente inviato da marco.r Guarda i messaggi
la stringa "ciao" e' lunga cinque caratteri, la stai mettendo in un array da quattro; inoltre non e' buona cosa stampare a video un intero con "%ld", e' pensata per i long. In una macchina a 32bit non cambia nulla, in una a 64bit invece si'.
Grazie per il suggerimento!

Scusami poi per la domanda forse banale, che ripeto: è possibile che lato client la connect() dia errore e contemporanemente la accept() lato server no?
domberti è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2013, 17:52   #13
domberti
Junior Member
 
Iscritto dal: Dec 2013
Messaggi: 10
Premetto che il modulo sul quale è alloggiato il client lo gestisco dal pc (sul quale mi gira il server) attraverso il suo stesso software di sviluppo, fornito dal produttore.
Ho fatto un tentativo: ho fatto la connect dal client verso il suo stesso indirizzo IP (quello della scheda di rete del modulo) e porta 23 e la connect() non da problemi, così come la send(), cosa che non riesco proprio a giustificare.
domberti è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2013, 21:46   #14
british
Member
 
L'Avatar di british
 
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
Scusa, magari dico una sciocchezza, ma sei sicuro che sia la connect() a darti l'ESHUTDOWN? mi sembra più un errore da send() o simili.
british è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2013, 17:15   #15
domberti
Junior Member
 
Iscritto dal: Dec 2013
Messaggi: 10
RISOLTO! Era banalmente un problema legato al modulo, che non assumeva immediatamente la corretta configurazione di rete.

Grazie a tutti!
domberti è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2013, 21:56   #16
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3984
vedi che erano i driver che non andavano ?
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Attenti a questa estensione per Chrome: ...
Amazon TOP 10, 4 novità in cima a...
Un ex Microsoft riscrive il Blocco Note:...
Le aziende hanno scoperto quanto costa d...
Mark Zuckerberg ammette: lo sviluppo deg...
Echo Show 5 scende a 69,99€: il display ...
Meta lancia Pocket: la nuova app basata ...
iPhone 18 Pro, confermato l'arrivo di un...
Steam Machine morta dopo 20 minuti: arri...
Nuovi tagli per Xbox: smentita la chiusu...
Copilot sparito da Outlook: non è...
Galaxy S25 Edge 512GB a 620€ venduto e s...
L'adozione di Windows 11 continua a cres...
Corsair Frame 5000D Wood RS: il case mod...
Apple ci crede: l'iPhone Ultra pieghevol...
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: 10:21.


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