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:
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;
}
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...
questo è il client:
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;
}
stessa questione:in "//pin.sin_addr.s_addr = htonl(INADDR_ANY);"
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!!!