Skip to content
Snippets Groups Projects
Commit 21c15e11 authored by Ramiro Facundo Lorenzo Rodriguez Inthamoussu's avatar Ramiro Facundo Lorenzo Rodriguez Inthamoussu
Browse files

transferencia udp completa

parent 605041f3
No related branches found
No related tags found
No related merge requests found
#include "Clients.h"
#include "Util.h"
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#define MAXLEN 1024
void TCP(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, (const char *)TCP_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:%s\n", TCP_PORT);
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(char* HOSTNAME){
unsigned int length;
struct from;
// CREATE SOCKET
int sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) error("error when creating socket");
char buffer[256];
bzero(buffer,256);
sprintf(buffer, "subscription");
// ENVIO PEDIDO DE SUSCRIPCION
printf("Sending Subscription\n");
if (sendDatagramUDPtoHostname(sock, HOSTNAME, buffer, UDP_PORT) < 0)
error("Error on send first datagram");
printf("SENT\n");
// ESPERO RESPUESTA DEL SERVIDOR
bzero(buffer,256);
struct sockaddr_in from;
if (recvfrom(sock,buffer,256,0,(struct sockaddr *)&from, &length) < 0)
error("recvfrom");
printf("Subscription: %s\n", buffer);
while (true)
{
bzero(buffer,256);
if (recvfrom(sock,buffer,256,0,(struct sockaddr *)&from, &length) < 0)
error("recv from UDP frames");
printf("%s\n", buffer);
}
close(sock);
}
#ifndef CLIENTS_H_
#define CLIENTS_H_
#define UDP_PORT 9998
#define TCP_PORT 9999
void TCP(const char* HOST);
void UDP(char* HOSTNAME);
#endif /* CLIENTS_H_ */
using namespace std;
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <netdb.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);
#include "Clients.h"
#include "Util.h"
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]);
TCP(argv[2]);
}else if (strcmp(argv[1],"UDP") == 0){
UDP(9998 ,argv[2]);
UDP(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);
}
#include "Util.h"
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
int sendDatagramUDPtoHostname(int socket, char* HOSTNAME, char* buffer, unsigned short int destinationPort){
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(getIP(HOSTNAME));
server.sin_port = htons(destinationPort);
return sendto( socket , buffer , strlen(buffer) , 0, (const struct sockaddr *)&server , sizeof(struct sockaddr_in) );
}
void error(const char *msg)
{
perror(msg);
exit(0);
}
const char* getIP(char* hostname){
struct hostent *hp = gethostbyname(hostname);
if (hp==0)
error("Unknown host");
char* ipAddress = NULL;
struct in_addr **addr_list = (struct in_addr **)hp->h_addr_list;
if(addr_list[0] != NULL){
int tam = strlen(inet_ntoa(*addr_list[0]));
ipAddress = new char[tam+1];
sprintf(ipAddress, "%s", inet_ntoa(*addr_list[0]));
ipAddress[tam] = '\0';
}else{
error("Unknown host");
}
return ipAddress;
}
#ifndef UTIL_H_
#define UTIL_H_
int sendDatagramUDPtoHostname(int socket, char* HOSTNAME, char* buffer, unsigned short int destinationPort);
const char* getIP(char* hostname);
void error(const char *);
#endif /* UTIL_H_ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment