Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <netdb.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <stdlib.h>
- #include <string.h>
- #define BUFF_SIZE 255
- void error (char *err_msg) {
- perror(err_msg);
- exit(1);
- }
- int main (int argc, char **argv) {
- int sockfd, port = 1234, Pflag = 0, ch;
- int status;
- int rcv_len;
- char rcv_buf[BUFF_SIZE], send_buf[BUFF_SIZE];
- struct sockaddr_in servaddr;
- struct addrinfo hints, *res;
- socklen_t serv_len;
- char *host;
- int i;
- if (argc < 2) {
- error("Usage: ./udpklijent [-p port] server_IP");
- }
- while ((ch = getopt(argc, argv, "p")) != -1){
- switch(ch){
- case 'p':
- Pflag = 1;
- break;
- default:
- error("Usage: ./udpklijent [-p port] server_IP");
- break;
- }
- }
- host = argv[argc - 1];
- sockfd = socket (AF_INET, SOCK_DGRAM, 0);
- if (sockfd < 0)
- error("Problem s otvaranjem socketa");
- memset(&servaddr, 0, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- inet_pton(AF_INET, host , &servaddr.sin_addr);
- if (Pflag) {
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_INET;
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_flags = AI_PASSIVE;
- if (getaddrinfo(NULL, argv[2], &hints, &res) < 0)
- error("Problem s getaddrinfo()");
- servaddr.sin_port = ((struct sockaddr_in *)res->ai_addr)->sin_port;
- }
- else {
- servaddr.sin_port = htons(port);
- }
- serv_len = sizeof(struct sockaddr);
- while (1) {
- memset(send_buf, 0, BUFF_SIZE);
- memset(rcv_buf, 0, BUFF_SIZE);
- // Citaj s standardnog ulaza
- status = scanf("%s", send_buf);
- // Ako je duljina buffera 0, posalji serveru prazan datagram
- if (status == EOF) {
- if( sendto(sockfd, 0, 0, 0, (struct sockaddr *) &servaddr, serv_len) < 0)
- error("Problem s slanjem praznog datagrama");
- return 0;
- } else {
- if (sendto( sockfd, send_buf, strlen(send_buf) + 1, 0,
- (struct sockaddr *) &servaddr, serv_len) < 0)
- error("Problem s slanjem datagrama");
- if ((rcv_len = recvfrom( sockfd, rcv_buf, BUFF_SIZE, 0,
- (struct sockaddr *) &servaddr, &serv_len)) < 0)
- error("Problem s primanjem datagrama");
- if (rcv_buf[0] == 0x00)
- printf("posluzitelj nije pronasao odgovor\n");
- if (rcv_buf[0] == 0x01) {
- for (i=1; i<rcv_len - 1; i++) {
- printf("%X ", rcv_buf[i]);
- }
- printf("\n");
- }
- if (rcv_buf[0] == 0x02) {
- memmove(rcv_buf, rcv_buf + 1, rcv_len - 1);
- printf("%s\n", rcv_buf);
- }
- }
- }
- freeaddrinfo(res);
- close(sockfd);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement