26/04/08 9:14
John
ciao a tutti!
Dopo aver cercato dappertutto un esempio di programma che utilizzi le socket ne ho trovato uno qui:
swprog.com/articoli/…
Il mio problema è che se lo utilizzo in locale (indirizzo ip server e client = 127.0.0.1) funziona, se invece metto un altro indirizzo ip per il server, quando lo lancio accetta subito una connessione da 227.194.191.*** [non so se sia sicuro scriverlo...] e riceve un messaggio di 2 caratteri.. come posso fare percheè accetti una sola connessione da chi voglio io (il mio client)?
i codici sono i seguenti:
server:
client:
un enormee grazie a chi mi aiuterà!!
=John=
Dopo aver cercato dappertutto un esempio di programma che utilizzi le socket ne ho trovato uno qui:
swprog.com/articoli/…
Il mio problema è che se lo utilizzo in locale (indirizzo ip server e client = 127.0.0.1) funziona, se invece metto un altro indirizzo ip per il server, quando lo lancio accetta subito una connessione da 227.194.191.*** [non so se sia sicuro scriverlo...] e riceve un messaggio di 2 caratteri.. come posso fare percheè accetti una sola connessione da chi voglio io (il mio client)?
i codici sono i seguenti:
server:
#include <winsock.h> #include <string.h> #include <iostream.h> main() { SOCKET listenSocket; SOCKET remoteSocket; SOCKADDR_IN Server_addr; SOCKADDR_IN Client_addr; int sin_size; short port; char buffer[256]; int wsastartup; int ls_result; /* Inizializzazione della libreria Socket */ WORD wVersionRequested = MAKEWORD(2,2); WSADATA wsaData; wsastartup = WSAStartup(wVersionRequested, &wsaData); if (wsastartup != NO_ERROR) cout<<"Errore WSAStartup()\n"; /* Creazione della Socket che si porrà in ascolto di richieste del Client*/ listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (listenSocket < 0) cout<<"Server: errore nella creazione della socket.\n"; else cout<<"La Listening Socket è partita\n"; /* Effettua la bind sull’indirizzo e porta ora specificati */ port = 4000; Server_addr.sin_family = AF_INET; Server_addr.sin_addr.S_un.S_un_b.s_b1=127; // indico l'indirizzo IP Server_addr.sin_addr.S_un.S_un_b.s_b2=0; Server_addr.sin_addr.S_un.S_un_b.s_b3=0; Server_addr.sin_addr.S_un.S_un_b.s_b4=1; Server_addr.sin_port = htons(port); if (bind(listenSocket,(LPSOCKADDR)&Server_addr,sizeof(struct sockaddr)) < 0) cout<<"Server: errore durante la bind.\n"; /* La socket si pone in "ascolto" tramite la listen() */ ls_result = listen(listenSocket, SOMAXCONN); if (ls_result < 0) cout<<"Server: errore durante la listen.\n"; else cout<<"La Socket è in Ascolto\n"; /* La socket accetta la richiesta di connessione del Client */ sin_size = sizeof(struct sockaddr_in); remoteSocket = accept(listenSocket, (struct sockaddr *)&Client_addr,&sin_size); cout<<"Accettata Connessione con Client: "<<inet_ntoa(Client_addr.sin_addr)<<endl; /* Il Server accetta il messaggio dal Client */ recv(remoteSocket, buffer, sizeof(buffer), 0); cout<<"Messaggio Arrivato: "<<buffer<<endl; cout<<"Chiudo il Server"<<endl; closesocket(remoteSocket); WSACleanup(); system("pause"); return 0; }
client:
#include <winsock.h> #include <string.h> #include <iostream.h> #include <stdlib.h> #include <conio.h> int main() { SOCKET clientsocket; SOCKADDR_IN addr; char messaggio[80],t; short port; WORD wVersionRequested = MAKEWORD(2,2); WSADATA wsaData; WSAStartup(wVersionRequested, &wsaData); port = 4000; addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = htons(port); clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (connect(clientsocket, (LPSOCKADDR)&addr, sizeof(addr)) < 0) cout<<"Errore nella connessione con il Server"<<endl; cout<<"Messaggio da Inviare: "; gets(messaggio); send(clientsocket,messaggio,sizeof(messaggio),0); closesocket(clientsocket); WSACleanup(); system("pause"); return 0; }
un enormee grazie a chi mi aiuterà!!
=John=
aaa