|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jan 2010
Messaggi: 8
|
Socket windows
Salve ragazzi dovrei compilare un programma banale che possa andare anche per xp e vista.
Codice:
#include <stdio.h> #include <time.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include <unistd.h> #define SA struct sockaddr struct sockaddr_in smurf,cl_addr; //Sock_addr per connect al Server time_t rawtime; struct tm * timeinfo; char buffer [29]; int main() { FILE* f=fopen("./captf.txt","w"); int sk= socket(PF_INET, SOCK_STREAM, 0); //Creazione Socket Tcp per dialogare con Server memset(&smurf, 0, sizeof(smurf)); smurf.sin_family = AF_INET; smurf.sin_addr.s_addr = htonl(INADDR_ANY); smurf.sin_port = htons(1236); if (bind(sk, (SA *) &smurf, sizeof(smurf)) !=0 ) { perror("!..BIND ..!\n"); exit (1); } unsigned short quanti=0; while (quanti<20) { int ret = listen(sk, 10); int len = sizeof(cl_addr); int cn_sk = accept(sk, (SA *) &cl_addr, &len); if(cn_sk == -1) perror("nell'accept\n"); int pid=fork(); if (pid == 0) { time ( &rawtime ); timeinfo = localtime ( &rawtime ); strftime (buffer,80,"%c",timeinfo); fprintf(f,"%s",buffer); fprintf(f,"%c",'\t'); char *s=(char*)inet_ntoa(cl_addr.sin_addr); fprintf(f,"%s",s); fprintf(f,"%c",'\n'); return 0; } wait(NULL); quanti ++; } return 0; } Inet_pton non è supportata? Grazie 1000 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12847
|
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
fondamentalmente devi linkare ws2_32, inizializzarla con WSAStartup e utilizzare winsock2.h come header
ps: oh wait, non avevo visto la fork ![]() Ultima modifica di tuccio` : 27-03-2011 alle 14:01. |
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Jan 2010
Messaggi: 8
|
Scusate ho incollato il codice sbagliato,quello è lato server,che deve girare su unix quindi va bene.
Lato client è questo: Codice:
#include <Winsock2.h> #include <netinet/ip.h> #include <netinet/udp.h> #include <string.h> #include <stdlib.h> #define SA struct sockaddr struct sockaddr_in smurf; //Sock_addr per connect al Server int main() { int sk= socket(PF_INET, SOCK_STREAM, 0); //Creazione Socket Tcp per dialogare con Server if (sk == -1) return 1 ; memset(&smurf, 0, sizeof(smurf)); smurf.sin_family = AF_INET; smurf.sin_port = htons(1236); int ret = inet_pton(AF_INET,"131.xx.xx.61", &smurf.sin_addr); //xx per privacy if (!ret) return 8; while(connect(sk,(SA*)&smurf,sizeof(smurf))) sleep(6); exit (0); } |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
su visual studio includendo anche <WS2tcpip.h> compila (ovviamente rimuovendo gli header che non ci sono su windows e sostituendo sleep con Sleep)
su MinGW non compila comunque |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Ti manca l'inizializzazione di WinSocks, come già suggerito.
Infine inet_pton non è disponibile su Xp, ma solo da Vista in poi. In rete trovi implementazioni della funzione utilizzabili su Xp. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:19.