è da quasi un anno e mezzo che non programmo in c e quindi sono un po arrugginito, e in piu visto che ho solo usato il php in sto periodo m sto pure incasinando con i tipi di variabili
ora ho un server e un client (che avevo scritto con tanto sudore un bel po di tempo fa), e funzionano che il client manda al server un messggio e il server lo fa vedere...
ora mi piacerebbe rispolverarlo e fare in modo che ogni carattere inserito vada direttamente a visualizzarsi sul server, insomma come una specie di telnet per intenderci... sapreste aiutarmi con qualche dritta? grazie mille
CLIENT
SERVERcodice:#include <windows.h> #include <winsock.h> //includo le varie librerie tra cui quella winsock #include <stdio.h> int main(int argn,char **argv) { int err = 0; SOCKET sock; // creo la socket chiamato sock che userò nella connessione struct sockaddr_in sock_addr; // inizializzo la socket WSADATA data; // inizializzo la variabile che contiene le primitive di Winsock WORD p; p=MAKEWORD(2,0); // creo la variabile p che contiene la versione della wsock32.dll char messaggio[2000]; int errori = 0; err = WSAStartup(p,&data); // inizializzo la wsock32.dll verificandone la mancanza di errori sock=socket(PF_INET,SOCK_STREAM,0); // creo la socket indicandone le caratteristiche sock_addr.sin_family=PF_INET; // indico il protocollo utilizzato (TCP/IP) sock_addr.sin_port=htons(1234); //indico la porta a cui connettere la socket sock_addr.sin_addr.S_un.S_un_b.s_b1=127; // indico l'indirizzo IP sock_addr.sin_addr.S_un.S_un_b.s_b2=0; sock_addr.sin_addr.S_un.S_un_b.s_b3=0; sock_addr.sin_addr.S_un.S_un_b.s_b4=1; err = connect(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr)); // mi connetto all'indirizzo scelto char mex[2000]; recv(sock,mex,2000,0); printf("FROM server: %s",mex); for (int x=0;;x++){ //*********************dialogo***********************// printf("commands> "); gets(messaggio); if (messaggio[0] == 'e' && messaggio[1] == 'x' && messaggio[2] == 'i' && messaggio[3] == 't') break; errori = send(sock,messaggio,2000,0); if (errori == 2000){ printf("2000 comando: %s\n",messaggio); }else { printf("errore send() %d\n" ,errori); } } closesocket(sock); // chiudo la socket WSACleanup(); //libero le risorse utilizzate dalla libreria Winsock //end for printf("\n\n%d\n",err); return 0; }
codice:#include <windows.h> #include <winsock.h> #include <stdio.h> #include <string.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[]="SERVER attivo: in attesa di messaggi!!!\n"; p=MAKEWORD(2,0); loading: err=WSAStartup(p,&data); miosock=socket(PF_INET,SOCK_STREAM,0); miosock_addr.sin_family=PF_INET; miosock_addr.sin_port=htons(atoi("1111")); 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); client=accept(miosock,(struct sockaddr*)&client_addr,&lun); if (err!=0) printf ("Errore connessione"); //**************dialogo***************/ send(client,mex,sizeof(mex),0); int recverr = 0; for(;;){ char mex2[2000]; recverr = recv(client,mex2,2000,0); printf("recv: %d\n",recverr); if (recverr != 2000){ break; }else{ printf("%s\n",mex2); } //comandi: if (strncmp(mex2, "restart", 7) == 0){ printf("comando %s riconosciuto!",mex2); closesocket (client); closesocket(miosock); WSACleanup(); goto loading; } else if (strncmp(mex2, "stop", 4) == 0) { break; } else { printf("comando sconosciuto: %s\n\n",mex2); } }//chiusura for closesocket (client); closesocket(miosock); WSACleanup(); //end system("pause"); return 0; }

Rispondi quotando
a presto
