Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * udpclient.c - A simple UDP client
- * usage: udpclient <host> <port>
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #include <arpa/inet.h>
- #include <sys/ioctl.h>
- #include <net/if.h>
- #include <errno.h>
- #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 sockaddr_in bindaddr;
- char *bindaddr_str;
- struct hostent *server;
- char *hostname;
- char buf[BUFSIZE];
- /* check command line arguments */
- if (argc != 4) {
- fprintf(stderr,"usage: %s <hostname> <port> <bind iface>\n", argv[0]);
- exit(0);
- }
- hostname = argv[1];
- portno = atoi(argv[2]);
- bindaddr_str = argv[3];
- /* socket: create the socket */
- sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- if (sockfd < 0)
- error("ERROR opening socket");
- struct ifreq ifr;
- snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), bindaddr_str);
- /* if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) < 0) {
- fprintf(stderr, "ERROR: can't bind to device %s,\n%s",
- bindaddr_str, strerror(errno));
- exit(1);
- }*/
- /* 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 */
- bzero((char *) &serveraddr, sizeof(serveraddr));
- serveraddr.sin_family = AF_INET;
- bcopy((char *)server->h_addr,
- (char *)&serveraddr.sin_addr.s_addr, server->h_length);
- serveraddr.sin_port = htons(portno);
- /*memset((void *) &bindaddr, 0, sizeof(bindaddr));
- bindaddr.sin_family = AF_INET;
- inet_pton(AF_INET, bindaddr_str, &(bindaddr.sin_addr));
- if (bind(sockfd, (struct sockaddr *) &bindaddr, sizeof(bindaddr)) < 0) {
- perror("Error in binding");
- exit(1);
- }*/
- while (1) {
- /* get a message from the user */
- bzero(buf, 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);
- printf("sent %s", buf);
- if (n < 0)
- error("ERROR in sendto");
- /* print the server's reply */
- n = recvfrom(sockfd, buf, strlen(buf), 0,
- (struct sockaddr *)&serveraddr, &serverlen);
- if (n < 0)
- error("ERROR in recvfrom");
- printf("Echo from server: %s", buf);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement