Newer
Older
#include <iostream>
Alvaro Liber Vallve Maidana
committed
#include <unistd.h>
#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>
Alvaro Liber Vallve Maidana
committed
Alvaro Liber Vallve Maidana
committed
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);
Alvaro Liber Vallve Maidana
committed
//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);
Alvaro Liber Vallve Maidana
committed
void UDP(int PORT, const char* HOST){
int sock, n;
unsigned int length;
struct sockaddr_in server, from;
struct hostent *hp;
char buffer[256];
Alvaro Liber Vallve Maidana
committed
sock= socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0)
error("socket");
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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);
}