Skip to content
Snippets Groups Projects
Tarea2-RC-Grupo25-Cliente.cpp 2.66 KiB
Newer Older
using namespace std;

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#define MAXLEN 1024
void error(const char *);
void TCP(const char* PORT, const char* HOST);
void UDP(int PORT, const char* HOST);


int main(int argc, char *argv[]) {

		printf("argv[0]: %s\n" , argv[0] );
		printf("argv[1]: %s\n" , argv[1] );
	   if (strcmp(argv[1],"TCP")  == 0){
		   TCP("9999", argv[2]);
	   }else if (strcmp(argv[1],"UDP")  == 0){
		   UDP(9998 ,argv[2]);
	   }else{
		   printf("ERROR: first argument must be TCP or UDP.\n");
		   return -1;
	   }
}

void error(const char *msg)
{
    perror(msg);
    exit(0);
}


void TCP(const char* PORT, const char* HOST){
	   int client_socket = socket(AF_INET, SOCK_STREAM, 0);
	   //obtenemos la direccion con getaddrinfo
	   struct addrinfo hints, *res;
	   memset(&hints, 0, sizeof hints);
	   hints.ai_family = AF_INET;
	   hints.ai_socktype = SOCK_STREAM;
	   getaddrinfo(HOST, PORT, &hints, &res);
	   //primitiva CONNECT
	   connect(client_socket, res->ai_addr, res->ai_addrlen);

	   //primitiva SEND
	   char *msg = "TCP";
	   int msg_size = strlen(msg);
	   int sent_msg_size = send(client_socket, msg, msg_size, 0);

	   printf("intentando conexion con localhost:9999\n");


	   char* data = (char*)malloc(MAXLEN);
	   int data_size = MAXLEN;

	   while (true){

		   int received_data_size = recv(client_socket, data, data_size, 0);
		   printf("%s\n", data);
		   free (data);

		   data = (char*)malloc(MAXLEN);
		   data_size = MAXLEN;

		   sleep(1);
	   }

	   close(client_socket);
	   freeaddrinfo(res);
void UDP(int PORT, const char* HOST){
	   int sock, n;
	   unsigned int length;
	   struct sockaddr_in server, from;
	   struct hostent *hp;
	   char buffer[256];
	   sock= socket(AF_INET, SOCK_DGRAM, 0);
	   if (sock < 0)
		   error("socket");
	   server.sin_family = AF_INET;
	   hp = gethostbyname(HOST);
	   if (hp==0)
		   error("Unknown host");

	   bcopy((char *)hp->h_addr,
	        (char *)&server.sin_addr,
	         hp->h_length);
	   server.sin_port = htons(PORT);
	   length=sizeof(struct sockaddr_in);

	   bzero(buffer,256);

	   sprintf(buffer, "subscription");


	   if (sendto(sock,buffer, strlen(buffer),0,(const struct sockaddr *)&server,length) < 0)
		   error("Error on send first datagram");


	   n = recvfrom(sock,buffer,256,0,(struct sockaddr *)&from, &length);
	   if (n < 0)
		   error("recvfrom");

	   write(1,"Got an ack: ",12);
	   write(1,buffer,n);

	   close(sock);
}