<server_udp.c>
#include <stdio.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
void error(char *msg)
{
perror(msg);
exit(0);
}
int main(int argc, char *argv[])
{
int sock, length, fromlen, n;
struct sockaddr_in server;
struct sockaddr_in from;
char buf[1024];
if(argc < 2)
{
fprintf(stderr, "ERROR, no port provided\n");
exit(0);
}
sock = socket(AF_INET, SOCK_DGRAM, 0);
if(sock <0) error("Opening socket");
length = sizeof(server);
bzero(&server, length);
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
//server.sin_port = htons(atoi(argv[1]));
server.sin_port = htons(8024);
if( bind(sock, (struct sockaddr *)&server, length) < 0 )
error("Binding");
fromlen = sizeof(struct sockaddr_in);
while (1)
{
n = recvfrom(sock, buf, 256, 0, (struct sockaddr *)&from, &fromlen);
if(n <0)
{
error("recvfrom");
printf("Receive size 0\n");
exit(-1);
}
write( 1, "Received a datagram: ", 21);
buf[n] = '\0';
write( 1, buf, n);
n = sendto(sock,"Got your msg\n",13, 0, (struct sockaddr *)&from, sizeof(from));
if(n <0) error("sendto");
}
}
<client_udp.c>
#include <stdio.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
void error(char *);
int main(int argc, char *argv[])
{
int sock, length, n;
struct sockaddr_in server, from;
struct hostent *hp;
char buffer[256];
if(argc != 3)
{
printf("Usage: server port \n");
exit(1);
}
sock = (AF_INET, SOCK_DGRAM, 0);
if(sock <0) error("Socket\n");
server.sin_family = AF_INET;
hp = gethostbyname(argv[1]);
if(hp==0) error("Unknown host\n");
bcopy((char *)hp->h_addr, (char *)&server.sin_addr, hp->h_length);
//server.sin_port = htons(atoi(argv[2]));
server.sin_port = htons(8024);
length = sizeof(struct sockaddr_in);
printf("Please enter the message");
bzero(buffer, 256);
fgets(buffer, 255, stdin);
n = sendto(sock, buffer, strlen(buffer), 0,(struct sockaddr *)&server, sizeof(server));
if(n < 0) error("Sendto\n");
n = recvfrom(sock, buffer, 256, 0, (struct sockaddr *)&server, &length);
if(n < 0) error("recvfrom\n");
buffer[n] = '\0';
write(1, "Got an ack: ",12);
write(1, buffer,n);
}
void error(char *msg)
{
perror(msg);
exit(0);
}