Server:
# Include <stdio. h>
# Include <stdlib. h>
# Include <sys/socket. h>
# Include <ARPA/inet. h>
# Include <string. h>
# Include <errno. h>
# Include <unistd. h>
# Define bufsize 1024
Int main (void)
{
Struct sockaddr_in local_addr, remote_addr;
Int sockfd;
Int server_ip, nrecv;
Int Alen;
File * FP;
Char buffer [bufsize];
Memset (& local_addr, 0, sizeof (local_addr ));
Local_addr.sin_family = af_inet;
Local_addr.sin_port = htons (5666 );
Inet_ton (af_inet, "127.0.0.1", (void *) & server_ip );
Local_addr.sin_addr.s_addr = server_ip;
Sockfd = socket (af_inet, sock_dgram, 0 );
If (BIND (sockfd, (struct sockaddr *) & local_addr, sizeof (struct sockaddr) <0 ){
Fprintf (stderr, "error: BIND () error! \ N ");
Exit (-1 );
}
Printf ("=============================== begin to service ========================== =======\ N ");
While (1 ){
If (nrecv = recvfrom (sockfd, buffer, bufsize, 0, (struct sockaddr *) & remote_addr, & Alen) <0 ){
Fprintf (stderr, "error: % s \ n", strerror (errno ));
Exit (1 );
} Else
{
Buffer [nrecv] = '\ 0 ';
Sendto (sockfd, buffer, strlen (buffer), 0, (struct sockaddr *) & remote_addr, Alen );
}
}
Exit (0 );
}
Client:
# Include <stdio. h>
# Include <stdlib. h>
# Include <unistd. h>
# Include <strings. h>
# Include <string. h>
# Include <sys/types. h>
# Include <sys/socket. h>
# Include <netinet/in. h>
# Include <netdb. h>
# Define Port 1234
# Define maxdatasalize 100
Int main (INT argc, char * argv [])
{
Int FD, numbytes;
Int server_ip;
Char recvbuf [maxdatasize];
Char sendbuf [maxdatasize];
Struct hostent * He;
Struct sockaddr_in server, client;
If (FD = socket (af_inet, sock_dgram, 0) =-1 ){
Printf ("socket () error \ n ");
Exit (1 );
}
Bzero (& server, sizeof (server ));
Server. sin_family = af_inet;
Server. sin_port = htons (5666 );
Inet_ton (af_inet, "127.0.0.1", (void *) & server_ip );
Server. sin_addr.s_addr = server_ip;
Socklen_t Len;
Len = sizeof (struct sockaddr_in );
While (1 ){
Printf ("input message :");
Fgets (sendbuf, 40, stdin );
Sendto (FD, sendbuf, strlen (sendbuf), 0, (struct sockaddr *) & server, Len );
If (numbytes = recvfrom (FD, recvbuf, maxdatasize, 0, (struct sockaddr *) & server, & Len) =-1 ){
Printf ("recvfrom () error \ n ");
Exit (1 );
}
Recvbuf [numbytes] = '\ 0 ';
Printf ("server return reverse message: % s \ n", recvbuf );
}
Close (FD );
}
Finished