|
|||||||
|
|
|
![]() |
|
|
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: 12919
|
|
|
|
|
|
|
#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 15: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: 04:05.



















