ilroci
29-01-2010, 16:11
salve a tutti,
devo realizzare un programma per la condivisione di file nella mia rete di casa (2 pc con un router).
Sul computer A c'è installato ubunutu ed ha come indirizzo locale 192.168.1.102;
sul computer B c'è installato windows XP con indirizzo locale 192.168.1.101.
L'intento è quello di creare un server sul pc B e un client sul pc A.
creo il server utilizzando una windows socket:
/*************************************
* created by Komrade
* http://unsecure.altervista.org
*************************************/
//Programma che si mette in ascolto e accetta connessioni da una porta scelta a riga di comando
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#define MAX_STRING 256
int main(int argn,char **argv){
SOCKET miosock,client;
struct sockaddr_in miosock_addr,client_addr;
WSADATA data;
WORD p;
int len(char *);
int lun, err=0;
char mex[]="CONNESSIONE AVVENUTA!\n";
p=MAKEWORD(2,0);
err=WSAStartup(p,&data);
if (argn!=2){
printf("\nUso: %s <porta ascolto>\n",argv[0]);
exit(0);
}
miosock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
miosock_addr.sin_family=AF_INET;
miosock_addr.sin_port=htons(atoi(argv[1]));
miosock_addr.sin_addr.s_addr=INADDR_ANY;
err=bind(miosock,(struct sockaddr*)&miosock_addr,sizeof(struct sockaddr_in));
err=listen(miosock,1);
lun=sizeof (struct sockaddr);
printf("attesa di una connessione\n");
client=accept(miosock,(struct sockaddr*)&client_addr,&lun);
if (err!=0) printf ("Errore connessione");
send(client,mex,22,0);
closesocket (client);
closesocket(miosock);
WSACleanup();
return 0;
}
quando si lancia il server bisogna specificare la porta, io mi connetto sulla 8000
poi creo il client utilizando una linux socket
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <netdb.h>
#include <string.h>
int main(){
//creazione della socket
int clientSocket;
if((clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
perror("Can't create TCP socket");
}
else{printf("clientSocket creata\n");}
//connessione al server
int port = 8000;
sockaddr_in Client_addr;
Client_addr.sin_family = AF_INET;
Client_addr.sin_addr.s_addr = inet_addr("192.168.1.101");
//Client_addr.sin_addr.s_addr = 0;
Client_addr.sin_port = htons(port);
printf("in attesa di connessioni\n");
if(connect(clientSocket, (sockaddr*)&Client_addr, sizeof(struct sockaddr))<0)
printf("errore durante la connect\n");
else
printf("connessione effettuata.\n");
return 0;
}
a questo punto lancio il server su win e rimane in attesa di una connessione,
passo a linux e lancio il client e.... "errore durante la connect", mentre il server rimane immobile...
La cosa strana è che tra linux e linux funziona (ho provato con il pc portatile di un mio amico che ha ubuntu e la connessione si stabilisce).
Come ultima spiaggia ho aperto le porte sul router
TCP 8000 192.168.1.101
TCP 8000 192.168.1.102
Ora la domanda: ma le socket non rendono ininfluente l'host di connessione? mi spiego meglio, la teoria ci dice che le socket stanno sopra i protocolli di comunicazione quindi dal momento che entrambi i programmi vengono sia compilati che eseguiti come può essere che nn funzioni?
grazie per l'attenzione, Giacomo
devo realizzare un programma per la condivisione di file nella mia rete di casa (2 pc con un router).
Sul computer A c'è installato ubunutu ed ha come indirizzo locale 192.168.1.102;
sul computer B c'è installato windows XP con indirizzo locale 192.168.1.101.
L'intento è quello di creare un server sul pc B e un client sul pc A.
creo il server utilizzando una windows socket:
/*************************************
* created by Komrade
* http://unsecure.altervista.org
*************************************/
//Programma che si mette in ascolto e accetta connessioni da una porta scelta a riga di comando
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#define MAX_STRING 256
int main(int argn,char **argv){
SOCKET miosock,client;
struct sockaddr_in miosock_addr,client_addr;
WSADATA data;
WORD p;
int len(char *);
int lun, err=0;
char mex[]="CONNESSIONE AVVENUTA!\n";
p=MAKEWORD(2,0);
err=WSAStartup(p,&data);
if (argn!=2){
printf("\nUso: %s <porta ascolto>\n",argv[0]);
exit(0);
}
miosock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
miosock_addr.sin_family=AF_INET;
miosock_addr.sin_port=htons(atoi(argv[1]));
miosock_addr.sin_addr.s_addr=INADDR_ANY;
err=bind(miosock,(struct sockaddr*)&miosock_addr,sizeof(struct sockaddr_in));
err=listen(miosock,1);
lun=sizeof (struct sockaddr);
printf("attesa di una connessione\n");
client=accept(miosock,(struct sockaddr*)&client_addr,&lun);
if (err!=0) printf ("Errore connessione");
send(client,mex,22,0);
closesocket (client);
closesocket(miosock);
WSACleanup();
return 0;
}
quando si lancia il server bisogna specificare la porta, io mi connetto sulla 8000
poi creo il client utilizando una linux socket
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <netdb.h>
#include <string.h>
int main(){
//creazione della socket
int clientSocket;
if((clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
perror("Can't create TCP socket");
}
else{printf("clientSocket creata\n");}
//connessione al server
int port = 8000;
sockaddr_in Client_addr;
Client_addr.sin_family = AF_INET;
Client_addr.sin_addr.s_addr = inet_addr("192.168.1.101");
//Client_addr.sin_addr.s_addr = 0;
Client_addr.sin_port = htons(port);
printf("in attesa di connessioni\n");
if(connect(clientSocket, (sockaddr*)&Client_addr, sizeof(struct sockaddr))<0)
printf("errore durante la connect\n");
else
printf("connessione effettuata.\n");
return 0;
}
a questo punto lancio il server su win e rimane in attesa di una connessione,
passo a linux e lancio il client e.... "errore durante la connect", mentre il server rimane immobile...
La cosa strana è che tra linux e linux funziona (ho provato con il pc portatile di un mio amico che ha ubuntu e la connessione si stabilisce).
Come ultima spiaggia ho aperto le porte sul router
TCP 8000 192.168.1.101
TCP 8000 192.168.1.102
Ora la domanda: ma le socket non rendono ininfluente l'host di connessione? mi spiego meglio, la teoria ci dice che le socket stanno sopra i protocolli di comunicazione quindi dal momento che entrambi i programmi vengono sia compilati che eseguiti come può essere che nn funzioni?
grazie per l'attenzione, Giacomo