Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
Abbiamo provato per diverse settimane il nuovo Magic V5 di HONOR, uno smartphone pieghevole che ci ha davvero stupito. Il device è il più sottile (solo 4.1mm) ma non gli manca praticamente nulla. Potenza garantita dallo Snapdragon 8 Elite, fotocamere di ottima qualità e batteria in silicio-carbonio che garantisce un'ottima autonomia. E il Prezzo? Vi diciamo tutto nella nostra recensione completa.
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Google Pixel 10 Pro XL è il top di gamma della serie Pixel, presentando un ampio display Super Actua da 6.8 pollici insieme alle novità della serie, fra cui la ricarica wireless magnetica Pixelsnap e le nuove funzionalità AI avanzate. Il comparto fotografico include un sistema a tripla fotocamera con zoom Pro Res fino a 100x, mentre il processore Tensor G5 con 16GB di RAM garantisce prestazioni percepite molto elevate su Android.
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Forte della piattaforma Qualcomm Snapdragon X, il notebook Lenovo IdeaPad Slim 3 riesce a coniugare caratteristiche tecniche interessanti ad uno chassis robusto, con autonomia di funzionamento a batteria che va ben oltre la tipica giornata di lavoro. Un notebook dal costo accessibile pensato per l'utilizzo domestico o in ufficio, soprattutto con applicazioni native per architettura ARM
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-03-2005, 17:42   #1
uffanoia
Junior Member
 
Iscritto dal: Mar 2005
Messaggi: 16
Uffa ..i socket..

Ciao
qualcuno potrebbe dirmi perche' questo stupido programma non va?

in teoria Il client si connette al server che risponde con uno stupido messaggio.

La connessione sembra avvenire,ma il client non stampa quello che dovrebbe

---------------------------------------------------
server.c

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <winsock.h>

#define PORT 12345
#define BL 1024

main() {
int sock, client_len, fd;
char buffer[BL];
struct sockaddr_in server, client;

#ifdef WIN32
WSADATA wsaData;
WSAStartup (0x0101,&wsaData);
#endif


sock = socket(AF_INET, SOCK_STREAM, 0);

if (sock <0) {
perror("creazione del socket fallita");
exit(1);
}


server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY); /* accetta da qualunque sua interfaccia */
server.sin_port = htons(PORT);

if(bind(sock, (struct sockaddr *)&server, sizeof(server)) <0) {
perror("bind socket fallita");
exit(2);
}

listen(sock, 15);


while(1) {
client_len = sizeof(client);
if( (fd=accept(sock, (struct sockaddr *)&client, &client_len))<0) {
perror("accept fallita");
exit(3);
}

printf("Comunicazione in arrivo\n");
sprintf(buffer, "Ciao sono il Server di prova\n\0\0");
write(fd, buffer, strlen(buffer)+1);
close(fd);
}
}

---------------------------------------------------------------------------

Client.c

#include <winsock.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

#define PORT 12345
#define BL 1024

main(argc, argv) int argc; char *argv[]; {
int sock, server_len, count;
char buffer[BL];
struct hostent *host;
struct sockaddr_in server, client;

#ifdef WIN32
WSADATA wsaData;
WSAStartup (0x0101,&wsaData);
#endif

sock = socket(AF_INET, SOCK_STREAM, 0);

if (sock <0) {
perror("creazione del socket fallita");
exit(1);
}

host = gethostbyname(argv[1]);
if(host == NULL) {
perror("host inesistente");
exit(2);
}

server_len = sizeof server;
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr=htonl(INADDR_ANY);

memcpy(&server.sin_addr.s_addr, host->h_addr, host->h_length);


if(connect(sock, (struct sockaddr *)&server, sizeof(server))<0){
perror("Errore connect");
exit(3);
}

printf("Connessione Fatta\n");

while((count=read(sock, buffer, BL))>0) {
printf("%d %s\n", count, buffer);
}

close(sock);

}

-------------------------------------

grazie
ciao

Uffanoia
uffanoia è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2005, 18:27   #2
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
server
Codice:
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <winsock.h>

#define PORT 12345
#define BL 1024
#define localhost "127.0.0.1"

int main() {
        int sock, client_len, fd;
        char buffer[BL];
        struct sockaddr_in sad, cad;

#ifdef WIN32
       WSADATA wsaData;
       WSAStartup (0x0101,&wsaData);
#endif
       memset ((char*)&sad,0,sizeof(sad));
	   sad.sin_family = AF_INET;
	   sad.sin_addr.s_addr = inet_addr(localhost);
	   sad.sin_port = htons ((u_short)PORT);
       sock = socket(PF_INET, SOCK_STREAM, 0);
       if (sock <0) {
          perror("creazione del socket fallita");
          exit(1);
       }
       if(bind(sock, (struct sockaddr *)&sad, sizeof(sad)) <0) {
          perror("bind socket fallita");
          exit(2);
      }
      
      listen(sock, 15);
      while(1) {
          printf ("\nIn attesa di client\n");
          client_len = sizeof(cad);     
          if( (fd=accept(sock, (struct sockaddr *)&cad, &client_len))<0) {
              perror("accept fallita");
              exit(3);
          }
          printf("Comunicazione in arrivo\n");
          char string[] = "Ciao sono il server di prova.\n";
          send (fd, string, sizeof (string), 0); 
          closesocket (fd);
      }
      closesocket(sock);
}
client
Codice:
#include <winsock.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

#define PORT 12345
#define BL 1024
#define localhost "127.0.0.1"

int main(int argc, char* argv[]) {
int sock, server_len, count;
char buffer[BL];
struct hostent *host;
struct sockaddr_in server, client;

#ifdef WIN32
WSADATA wsaData;
WSAStartup (0x0101,&wsaData);
#endif

sock = socket(PF_INET, SOCK_STREAM, 0);

if (sock <0) {
perror("creazione del socket fallita");
exit(1);
}

host = gethostbyname(argv[1]);
if(host == NULL) {
perror("host inesistente");
exit(2);
}

server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(localhost);
server.sin_port = htons ((u_short)PORT);

if(connect(sock, (struct sockaddr *)&server, sizeof(server))<0){
perror("Errore connect");
exit(3);
}

printf("Connessione Fatta\n");

while((count=recv(sock, buffer, sizeof(buffer),0))>0) {
printf("%d %s\n", count, buffer);
}

closesocket(sock);
system ("PAUSE");
return (EXIT_SUCCESS);
}
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2005, 18:39   #3
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
guardando il codice velocemente ho notato che per inviare e ricevere i dati usi read e write, che non è del tutto sbagliato, ma il dubbio mi viene perche quelle funzioni si usano per scrivere i file a basso livello senza buffer(ogni chiamata corrisponde ad un accesso diretto al disco), e quindi non so con certezza se funzioni o meno, io ti consilio di usare le funzioni send e recv che funzionano sicuramente.

send(int socket,voids * buff,int buflen,int fleg)//per inviare normalmente puoi impostare il flag a 0

recv(int socket,voids * buff,int buflen,int fleg)//per ricevere normalmente puoi impostare il flag a 0
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2005, 18:51   #4
uffanoia
Junior Member
 
Iscritto dal: Mar 2005
Messaggi: 16
Grazie!!
Ora funziona perfettamente !

Ma per cosa sta PF_INET ?
--
La funzione che ho usato

memcpy(&server.sin_addr.s_addr, host->h_addr, host->h_length);

e' Inutile?

---
memset ((char*)&sad,0,sizeof(sad));

cancella la "struttura"? perche' bisogna farlo prima se subito dopo la si "riempie"?

---

Perchè l'uso di read e write non sono corrette?

--

Al posto di send e recv si potrebbero usare
sendto() e

recvfrom()?

---

ciao
uffanoia
uffanoia è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2005, 19:03   #5
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
PF_INET sta per il protocollo va bene anche AF_INET ... ma logicamente sarebbe meglio scrivere il primo nella creazione del socket.

memcpy che hai fatto va bene se vuoi usare gethostbyname te lo ho tolto per velocità mia.

cancellare la struttura è per la compatibilità con la struttura sockaddr. si è discusso un paio di giorni fa.

sendto e recvfrom dovrebbero forse andare mai provato

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2005, 19:20   #6
uffanoia
Junior Member
 
Iscritto dal: Mar 2005
Messaggi: 16
Ok ,tutto chiaro
grazie mille!

Buona giornata
Ciao

uffanoia
uffanoia è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2005, 19:21   #7
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
de nada

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 10:51   #8
pavimento
Member
 
Iscritto dal: Mar 2005
Messaggi: 41
ciao

secondo me per usare read e write devi condividere il buffer mettendolo in un .h

Gia' che ci sono chiedo..

Ma se invece di un messaggio stringa volessi rispondere con un intero come faccio visto che il buffer è dichiarato char * , e lo devo passare a send e recv come char *?

La funzione select() a cosa serve?

Se voglio mandare messaggi in broadcast,o mandare messaggi a piu client, come devo fare/cosa devo usare?
pavimento è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 11:00   #9
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
un modo sarebbe quello di usare una union

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 12:50   #10
uffanoia
Junior Member
 
Iscritto dal: Mar 2005
Messaggi: 16
Ciao,
Per gli interi con union funziona sicuramente.

per la select www.lilik.it/~mirko/gapil/gapilsu251.html

Per il broadcast credo si debba usare UDP,eliminando accept(),connect() e utilizzando solo sendto e recvfrom().

ciao

uffanoia
uffanoia è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 13:04   #11
Futuregames
Senior Member
 
Iscritto dal: Mar 2005
Messaggi: 349
scusate io nn ho mai capito a cosa serve il socket?
Futuregames è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 13:31   #12
pavimento
Member
 
Iscritto dal: Mar 2005
Messaggi: 41
grazie
e quindi che differenze ci sono con udp(che è poi sto udp?)?
non esiste alcun modo(corretto) per usare read e write invece di send e recv?
pavimento è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 14:24   #13
uffanoia
Junior Member
 
Iscritto dal: Mar 2005
Messaggi: 16
Allora..molto velocemente ..grosso modo..

Un socket è definita come l'stremita' di un canale di comunicazione.
Una coppia di processi che comunica attraverso una rete usa una coppia di socket,una per ogni processo,e ogni socket è identificata da un indirizzo IP concatenato a un numero di porta.
Le architetture client-server sono implementate ,solitamente,usando le socket.
Il server attende le richieste dei client ,stando in ascolto sulle porte;quando riceve una richiesta ,se accetta la connessione proveniente dalla socket del client ,si stabilisce la comunicazione.

La differenza è appunto è eliminare accept(),connect() e utilizzare solo sendto() e recvfrom().

Non so se esiste un modo per usare read e write,ma credo di si.
comunque funzionano benissimo anche send e recv .
Comunque se trovi un modo potresti postarlo..

ciao
uffanoia
uffanoia è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 17:21   #14
pavimento
Member
 
Iscritto dal: Mar 2005
Messaggi: 41
Ma se volessi contattare piu client con i socket normali non
si potrebb
e fare un ciclo for nella chiamata socket();

for(i=0;I<n;i++){
sock = socket(PF_INET, SOCK_STREAM, 0);

}

in questo modo ci sarebbe un socket per ogni client.O no?
pavimento è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 17:42   #15
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
dovresti creare dei figli

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 18:20   #16
pavimento
Member
 
Iscritto dal: Mar 2005
Messaggi: 41
utilizzando la fork()?

quindi come verrebbe?

while(1){
...
..
pid=fork();
if(pid==0){
fai_quello_che_devi-fare;

}

else close}

invia_risposta();}

???
pavimento è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 18:47   #17
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
Se si leggono le specifiche delle funzioni read è write, queste vanno ad eseguire un accesso diretto al dispositivo senza alcun buffer o cosa del genere, il socket invece possiede un buffer dove vengono scritti e letti i dati, quindi non si possono utilizzare funzioni non bufferizate su buffer e le read e write non funzionano, come invece funzionano le FileRead e FileWrite di windows.

Ciao..
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2005, 19:48   #18
pavimento
Member
 
Iscritto dal: Mar 2005
Messaggi: 41
Ma in teoria essendo

int read(int fildes,void* buf,size_t nbyte);

Legge n bytes dal file associato a fildes copiandoli nella zona di memoria a partire dall'indirizzo "buf";restituisce il numero di bytes effettivamente letti.

int write(int fildes,const void* buf,size_t nbyte);

Scrive nbyte nel file associato a "fildes" copiandoli nella zona di memoria a partire dall 'indirizzo "buf";restituisce il numero di bytes scritti.

dovrebbero leggere/scrivere i bytes dal/nel contenuto di buf.
Quindi se uso una write scrivo nel buffer e per leggerlo uso una read.Non capisco perche' non possa andare bene?
?????
pavimento è offline   Rispondi citando il messaggio o parte di esso
Old 14-03-2005, 16:01   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Per Windows devi usare send e recv...per Linux puoi usare send e recv o read e write...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-03-2005, 18:45   #20
pavimento
Member
 
Iscritto dal: Mar 2005
Messaggi: 41
ah ho capito
grazie
ciao
pavimento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli Recensione OnePlus Watch 3 43mm: lo smartwatch c...
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura BOOX Note Air4 C è uno spettacolo: il tab...
3 minuti: è il tempo per vedere l...
Gli Amazfit sono ora gli smartwatch più ...
Rowenta alza la posta: scopa elettrica s...
6 robot per le pulizie completi in offer...
Friggitrice ad aria Cecofry Full InoxBla...
iPhone 16 Pro Max a 10€ in più del minim...
Una chiavetta USB, ma SanDisk Ultra Slid...
La bolla dell'AI: perché l'econom...
Lo smartphone dovrebbe essere usato solo...
SpaceX: i video e le foto dello spettaco...
Anche a Pescara si passa ai fatti: e-bik...
La One UI 8 è pronta: Samsung con...
Xiaomi annuncia l'arrivo in Italia dei R...
La Cina stupisce ancora: test per la tur...
L'iconico iMac G3 diventerà un set LEGO?...
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:53.


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