home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.disi.unige.it
/
2015-02-11.ftp.disi.unige.it.tar
/
ftp.disi.unige.it
/
pub
/
.person
/
GianuzziV
/
SO1
/
WinUDPrecv.c
< prev
next >
Wrap
C/C++ Source or Header
|
2005-03-28
|
3KB
|
103 lines
/*********************************************************
* *
* UDPrecv.cpp (in coppia con UDPsend) *
* *
* riceve in loop da porta UDP 3123 un messaggio *
* (fino a 9 caratteri) e lo stampa *
* *
* Compilato con MS Visual C++ 6.0, va linkato *
* con ws2_32.lib *
* *
* Per usare i socket occorre inizializzare prima *
* la libreria WSA, che va poi chiusa prima di terminare *
* il processo. L'errore eventualmente generato durante *
* una chiamata a una funzione sui socket si trova *
* usando la funzione WSAGetLastError() *
* Il parametro ritornato non va confrontato con -1 *
* come in Linux, ma con apposite costanti. *
* *
**********************************************************/
#include <stdio.h>
#include "winsock2.h"
#include <stdlib.h>
#include <signal.h>
#define PORTNUM 3123 // Port number
#define HOSTNAME "localhost" // Server name string
SOCKET sock = INVALID_SOCKET;
int num=0;
void intr(int numsig)
{
printf("ricevuti %d messaggi \n", num);
closesocket(sock);
WSACleanup();
}
int main(int argc, char* argv[])
{
SOCKADDR_IN local_sin;
WSADATA WSAData;
char szClient[12];
int ret;
signal (SIGTERM, intr);
// Initiate Windows Sockets.
if (WSAStartup (MAKEWORD(1,1), &WSAData) != 0)
{
printf ("WSAStartup failed. Error: %d\n", WSAGetLastError ());
exit(1);
}
// apertura del socket
if ((sock=socket (AF_INET, SOCK_DGRAM, 0))== INVALID_SOCKET)
{
printf ("Allocating socket failed. Error: %d", WSAGetLastError ());
WSACleanup ();
exit(1);
}
// Inizializza il socket locale con le informazioni sull'indirizzo
local_sin.sin_family = AF_INET;
local_sin.sin_port = htons (PORTNUM);
local_sin.sin_addr.s_addr = htonl (INADDR_ANY);
// Associo l'indirizzo locale con WinSocket.
if (bind (sock, (struct sockaddr *) &local_sin, sizeof (local_sin)) == SOCKET_ERROR)
{
printf ("Bind failed. Error: %d", WSAGetLastError ());
WSACleanup ();
exit(2);
}
for (;;)
{
printf("aspetto di ricervere da porta %d ...\n", PORTNUM);
printf("\n------\n");
ret=recvfrom(sock, szClient, sizeof (szClient), 0, NULL, NULL);
szClient[ret]='\0';
printf("Ricevuto %d caratteri: \n%s \n\n", ret, szClient);
num++;
if (ret<0)
{
printf("recv failed: error %d \n", WSAGetLastError());
closesocket(sock);
WSACleanup();
exit(1);
}
}
closesocket(sock);
WSACleanup();
return TRUE;
}