udpSVdemtu

Màu nền
Font chữ
Font size
Chiều cao dòng

/* dgramsrvr.c:

*

* Example datagram server:

*/

#include <stdio.h>

#include <ctype.h>

#include <unistd.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <time.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

/*

* This function reports the error and

* exits back to the shell:

*/

static void

bail(const char *on_what)

{

fputs(strerror(errno),stderr);

fputs(": ",stderr);

fputs(on_what,stderr);

fputc('

',stderr);

exit(1);

}

int

main(int argc,char **argv) {

int z;

char *srvr_addr = NULL;

struct sockaddr_in adr_inet;/* AF_INET */

struct sockaddr_in adr_clnt;/* AF_INET */

int len_inet;

/* length */

int s;

/* Socket */

char dgram[512];

/* Recv buffer */

char dtfmt[512];

/* Date/Time Result */

time_t td;

/* Current Time and Date */

struct tm tm;

/* Date time values */

/*

* Use a server address from the command

* line, if one has been provided.

* Otherwise, this program will default

* to using the arbitrary address

* 127.0.0.23:

*/

if ( argc >= 2 ) {

/* Addr on cmdline: */

srvr_addr = argv[1];

} else {

/* Use default address: */

srvr_addr = "127.0.0.23";

}

/*

* Create a UDP socket to use:

*/

s = socket(AF_INET,SOCK_DGRAM,0);

if ( s == -1 )

bail("socket()");

/*

* Create a socket address, for use

* with bind(2):

*/

memset(&adr_inet,0,sizeof adr_inet);

adr_inet.sin_family = AF_INET;

adr_inet.sin_port = htons(9090);

adr_inet.sin_addr.s_addr =

inet_addr(srvr_addr);

if ( adr_inet.sin_addr.s_addr == INADDR_NONE )

bail("bad address.");

len_inet = sizeof adr_inet;

/*

* Bind a address to our socket, so that

* client programs can contact this

* server:

*/

z = bind(s,

(struct sockaddr *)&adr_inet,

len_inet);

if ( z == -1 )

bail("bind()");

/*

* Now wait for requests:

*/

for (;;) {

/*

* Block until the program receives a

* datagram at our address and port:

*/

len_inet = sizeof adr_clnt;

z = recvfrom(s,

/* Socket */

dgram,

/* Receiving buffer */

sizeof dgram,

/* Max recv buf size */

0,

/* Flags: no options */

(struct sockaddr *)&adr_clnt,/* Addr */

&len_inet);

/* Addr len, in & out */

if ( z < 0 )

bail("recvfrom(2)");

/*

* Process the request:

*/

dgram[z] = 0;

/* null terminate */

if ( !strcasecmp(dgram,"QUIT") )

break;

/* Quit server */

/*

* Get the current date and time:

*/

int i=0;

int dem=0;

if(dgram[0]!=32)

dem++;

for(i;i<strlen(dgram)-1;i++)

if(dgram[i]==32 && dgram[i+1]!=32) 

dem++;

sprintf(dtfmt,"%d",dem);

z = sendto(s,

/* Socket to send result */

dtfmt, /* The datagram result to snd */

strlen(dtfmt), /* The datagram lngth */

0,

/* Flags: no options */

(struct sockaddr *)&adr_clnt,/* addr */

len_inet); /* Client address length */

if ( z < 0 )

bail("sendto(2)");

}

/*

* Close the socket and exit:

*/

close(s);

return 0;

}

Bạn đang đọc truyện trên: Truyen2U.Pro

#lupj