Ciao ragazzi ho questo problema: ho un libro (programmare in linux tutto & oltre) ke parla di tutti gli aspetti della programmazione sotto linux, tra cui i socket...
mi interessava fare un client-server come veniva riportato sul libro stesso ma gcc mi da un botto d'errori!!!
questo è il sorgente del server:il primo errore l'ho risolto e cioè ho sostituito l'indirizzo del libro "sin.sin_addr.s_addr = INADDR_ANY" xké non conosce INADDR_ANY, con la soluzione trovata su internet...poi riporta altri errori ke ora non ricordo xké sto su win...codice:#include <stdio.h> #include <stdlib.h> #include <sys/socket.h> int main (void) { char buf[200]; struct sockaddr_in sin; struct sockaddr_in pin; int sock_descriptor; int temp_sock_descriptor; int address_size; sock_descriptor = socket(AF_INET, SOCK_STREAM, 0); bzero(&sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.S_un.S_un_b.s_b1=127; // indico l'indirizzo IP sin.sin_addr.S_un.S_un_b.s_b2=0; //soluzione presa da un post su internet sin.sin_addr.S_un.S_un_b.s_b3=0; sin.sin_addr.S_un.S_un_b.s_b4=1; /*sin.sin_addr.s_addr = INADDR_ANY; "127.0.0.1";*/ sin.sin_port = htons(8000); bind(sock_descriptor, (struct sockaddr *)&sin, sizeof(sin)); listen(sock_descriptor, 20); while(1) { temp_sock_descriptor = accept(sock_descriptor, (struct sockaddr*)&pin, &address_size); recv(temp_sock_descriptor, buf, 16384, 0); send(temp_sock_descriptor, buf, sizeof(buf), 0); close(temp_sock_descriptor); } return 0; }
questo è il client:stessa questione:in "//pin.sin_addr.s_addr = htonl(INADDR_ANY);"codice:#include <stdio.h> #include <sys/socket.h> int main (void) { char buf[200]; struct sockaddr_in pin; int socket_descriptor; struct hostent *server_host_name; server_host_name = gethostbyname("127.0.0.1"); bzero(&pin, sizeof(pin)); pin.sin_family = AF_INET; pin.sin_addr.S_un.S_un_b.s_b1=127; // indico l'indirizzo IP pin.sin_addr.S_un.S_un_b.s_b2=0; //sempre soluzione trovata pin.sin_addr.S_un.S_un_b.s_b3=0; pin.sin_addr.S_un.S_un_b.s_b4=1; //pin.sin_addr.s_addr = htonl(INADDR_ANY); pin.sin_addr.s_addr = ((struct in_addr *)(server_host_name->h_addr))->s_addr; (*) pin.sin_port = htons(8000); socket_descriptor = socket(AF_INET, SOCK_STREAM, 0); connect(socket_descriptor, (void *)&pin, sizeof(pin)); send(socket_descriptor, "test data", strlen("test data")+1, 0); recv(socket_descriptor, buf, 8192, 0); close(sock_descriptor); return 0; }
non conosce INADDR e io l'ho sostituito con la soluzione trovata(ke non da problemi), ma poi si incacchia qui (*)....ora come ho già scritto non so quali sono gli errori precisi ke gcc rileva, però ne prova più al client ke al server...
se qualke anima pia dà nokkiata a sti codici me fa un favore!!!io sto a uscicci matto xké quel libro la fa troppo semplice quando invece non funziona![]()
![]()
ho provato a spulciare i vari header ma mi so solo confuso....
il mio obiettivo era creare 2 applicazioni (server e client) da far girare contemporaneamente sullo stesso pc e poi dal client mandare rikieste al server...tutto qua!
Thx to all!!!


!!!
Rispondi quotando

