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
/
WinUDPsend.c
< prev
next >
Wrap
C/C++ Source or Header
|
2005-03-28
|
2KB
|
97 lines
/***********************************************************
* UDPsend.cpp (in coppia con UDPrecv) *
* *
* Chiamato con 2 parametri: *
* - messaggio da inviare *
* - porta *
* Invia il messaggio (fino a 10 caratteri) alla porta *
* indicata, su localhost *
* Compilato con MS Visual C++ 6.0 *
* *
************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "winsock2.h"
#define HOSTNAME "localhost" // IP del receiver
int main(int argc,char **argv)
{
SOCKET s;
struct sockaddr_in destination_addr;
WSADATA WSAData;
PHOSTENT phostent = NULL;
// Initiate Windows Sockets.
if (WSAStartup (MAKEWORD(1,1), &WSAData) != 0)
{
printf("WSAStartup failed. Error: %d\n",
WSAGetLastError ());
exit(0);
}
s=INVALID_SOCKET;
if(argc != 3)
{
printf("usage: %s message port\n",argv[0]);
WSACleanup ();
return 0;
}
// inizializzo il record contenente l'indirizzo del destinatario
destination_addr.sin_family = AF_INET;
destination_addr.sin_port = htons((unsigned short) atoi(argv[2]));
if ((phostent = gethostbyname (HOSTNAME)) == NULL)
{
printf ("Unable to get the host name. Error: %d\n",
WSAGetLastError ());
WSACleanup ();
exit(1);
}
// Assegno l'indirizzo IP alla struttura.
memcpy ((char FAR *)&(destination_addr.sin_addr),
phostent->h_addr, phostent->h_length);
// creo socket
s = socket(AF_INET, SOCK_DGRAM, 0);
if(s==INVALID_SOCKET)
{
printf("socket %d\n", s);
perror("Can't create socket");
return 1;
}
// send data
// limito il messaggio a 10 caratteri
if (strlen(argv[1])>10) argv[1][10]='\0';
if(sendto(s, argv[1], strlen(argv[1]), 0, (struct sockaddr *)
&destination_addr, sizeof(struct sockaddr_in))==-1)
{
printf("Can't send message\n");
closesocket(s);
WSACleanup ();
return 3;
}
// chiudo il canale
if(closesocket(s))
{
printf("Error on closing socket\n");
WSACleanup ();
return 4;
}
WSACleanup ();
return 0;
}