Last active
December 15, 2017 16:43
-
-
Save ssrlive/db177ab6bd3c792cf5d1225ec25a3dda to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* udp-client.c - A simple UDP client | |
* usage: udp-client <host> <port> | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <sys/types.h> | |
#if defined(_WIN32) | |
#include <WinSock2.h> | |
#pragma comment(lib, "Ws2_32.lib") | |
#else | |
#include <sys/socket.h> | |
#include <netinet/in.h> | |
#include <netdb.h> | |
#include <unistd.h> | |
#endif | |
#define BUFSIZE 1024 | |
/* | |
* error - wrapper for perror | |
*/ | |
void error(char *msg) { | |
perror(msg); | |
exit(0); | |
} | |
int main(int argc, char **argv) { | |
int sockfd, portno, n; | |
int serverlen; | |
struct sockaddr_in serveraddr; | |
struct hostent *server; | |
char *hostname; | |
char buf[BUFSIZE]; | |
{ | |
#if defined(_WIN32) | |
WSADATA wsaData; | |
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != NO_ERROR) { | |
printf("Error at WSAStartup()\n"); | |
return 1; | |
} | |
#endif | |
} | |
/* check command line arguments */ | |
if (argc != 3) { | |
fprintf(stderr,"usage: %s <hostname> <port>\n", argv[0]); | |
exit(0); | |
} | |
hostname = argv[1]; | |
portno = atoi(argv[2]); | |
/* socket: create the socket */ | |
sockfd = socket(AF_INET, SOCK_DGRAM, 0); | |
if (sockfd < 0) | |
error("ERROR opening socket"); | |
/* gethostbyname: get the server's DNS entry */ | |
server = gethostbyname(hostname); | |
if (server == NULL) { | |
fprintf(stderr,"ERROR, no such host as %s\n", hostname); | |
exit(0); | |
} | |
/* build the server's Internet address */ | |
memset(&serveraddr, 0, sizeof(serveraddr)); | |
serveraddr.sin_family = AF_INET; | |
memcpy(&serveraddr.sin_addr.s_addr, (char *)server->h_addr, server->h_length); | |
serveraddr.sin_port = htons(portno); | |
/* get a message from the user */ | |
memset(buf, 0, BUFSIZE); | |
printf("Please enter msg: "); | |
fgets(buf, BUFSIZE, stdin); | |
/* send the message to the server */ | |
serverlen = sizeof(serveraddr); | |
n = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&serveraddr, serverlen); | |
if (n < 0) { | |
error("ERROR in sendto"); | |
} | |
/* print the server's reply */ | |
n = recvfrom(sockfd, buf, BUFSIZE, 0, (struct sockaddr *)&serveraddr, &serverlen); | |
if (n < 0) { | |
error("ERROR in recvfrom"); | |
} | |
printf("Echo from server: %s", buf); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment