From dbe94761074f35c50a44e20c705c2262fccd9394 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 27 Jun 2016 15:50:03 -0700 Subject: [PATCH] updated tcp/udp test programs --- tests/{client.c => tcp_client.c} | 47 +++++++--------- tests/{server.c => tcp_server.c} | 4 +- tests/udp_client.c | 79 ++++++++++++++++++++++++++ tests/udp_server.c | 95 ++++++++++++++++++++++++++++++++ 4 files changed, 195 insertions(+), 30 deletions(-) rename tests/{client.c => tcp_client.c} (61%) rename tests/{server.c => tcp_server.c} (95%) create mode 100755 tests/udp_client.c create mode 100755 tests/udp_server.c diff --git a/tests/client.c b/tests/tcp_client.c similarity index 61% rename from tests/client.c rename to tests/tcp_client.c index c445a6a..18485ef 100644 --- a/tests/client.c +++ b/tests/tcp_client.c @@ -1,16 +1,15 @@ -/* - C ECHO client example using sockets -*/ -#include //printf -#include //strlen -#include //socket -#include //inet_addr +// TCP Client test program + +#include +#include +#include +#include int main(int argc , char *argv[]) { if(argc < 3) { - printf("usage: client \n"); - return 1; + printf("usage: client \n"); + return 1; } int sock, port = atoi(argv[2]); @@ -26,41 +25,33 @@ int main(int argc , char *argv[]) server.sin_port = htons( port ); printf("connecting...\n"); - if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0) - { + if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0) { perror("connect failed. Error"); return 1; } - puts("Connected\n"); - while(1) - { + while(1) { printf("Enter message : "); scanf("%s" , message); - - //Send some data - if(send(sock , "welcome to the machine!" ,24 , 0) < 0) - { + + // TX + if(send(sock , "welcome to the machine!" ,24 , 0) < 0) { puts("Send failed"); return 1; } - else - { - printf("len = %d\n", strlen(message)); - } - - //Receive a reply from the server - if(recv(sock , server_reply , 2000 , 0) < 0) - { + else { + printf("len = %d\n", strlen(message)); + } + + // RX + if(recv(sock , server_reply , 2000 , 0) < 0) { puts("recv failed"); break; } - puts("Server reply :"); puts(server_reply); } - close(sock); return 0; } diff --git a/tests/server.c b/tests/tcp_server.c similarity index 95% rename from tests/server.c rename to tests/tcp_server.c index 4758478..ed16d0a 100644 --- a/tests/server.c +++ b/tests/tcp_server.c @@ -1,4 +1,4 @@ -// C Server For ZT tests +// TCP Server test program #include #include @@ -9,7 +9,7 @@ int main(int argc , char *argv[]) { if(argc < 2) { - printf("usage: server \n"); + printf("usage: tcp_server \n"); return 1; } diff --git a/tests/udp_client.c b/tests/udp_client.c new file mode 100755 index 0000000..886ac88 --- /dev/null +++ b/tests/udp_client.c @@ -0,0 +1,79 @@ +// UDP Client test program + +#include +#include +#include +#include +#include +#include + +int main(int argc, char * argv[]) +{ + printf("cpp_udp_socket_client_test():\n"); + ssize_t n_sent; + int sock = -1; + struct sockaddr_in server; + char buf[64]; + + + + if(sock == -1) { + sock = socket(AF_INET , SOCK_DGRAM , 0); + if (sock == -1) { + return 1; + } + } + server.sin_addr.s_addr = inet_addr("10.242.142.99"); + server.sin_family = AF_INET; + server.sin_port = htons(9997); + + //char *buf = "Welcome to the Machine\n"; + memcpy(buf, "Welcome to the Machine", sizeof("Welcome to the Machine")); + + printf("sizeof(buf) = %d\n", sizeof(buf)); + if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0) { + printf("api_test: error while connecting.\n"); + return 1; + } + + +char data[1024]; +memset(data, 0, sizeof(data)); +int count =0; +while(1) +{ +count++; + usleep(1000); + n_sent = send(sock,data,sizeof(data),0); + + if (n_sent<0) { + perror("Problem sending data"); + return 1; + } + if (n_sent!=sizeof(buf)) + printf("Sendto sent %d bytes\n",(int)n_sent); + + printf("n_sent = %d, count = %d\n", n_sent,count); +} + return 1; + + + socklen_t recv_addr_len; + // Clear address info for RX test + server.sin_addr.s_addr = inet_addr(""); + server.sin_port = htons(-1); + + while (1) { + n_sent=recvfrom(sock,buf,sizeof(buf),0,(struct sockaddr *)&server,&recv_addr_len); + printf("Got a datagram from %s port %d\n", inet_ntoa(server.sin_addr), ntohs(server.sin_port)); + if (n_sent<0) { + perror("Error receiving data"); + } + else { + printf("RXed: %s\n", buf); + } + } + return 1; +} + + diff --git a/tests/udp_server.c b/tests/udp_server.c new file mode 100755 index 0000000..113813d --- /dev/null +++ b/tests/udp_server.c @@ -0,0 +1,95 @@ +// UDP Server test program + +#include /* standard C i/o facilities */ +#include /* needed for atoi() */ +#include /* defines STDIN_FILENO, system calls,etc */ +#include /* system data type definitions */ +#include /* socket specific definitions */ +#include /* INET constants and stuff */ +#include /* IP address conversion stuff */ +#include /* gethostbyname */ + + + +/* this routine echos any messages (UDP datagrams) received */ + +#define MAXBUF 1024*1024 + +void echo( int sd ) { + int len,n; + char bufin[MAXBUF]; + struct sockaddr_in remote; + + /* need to know how big address struct is, len must be set before the + call to recvfrom!!! */ + + len = sizeof(remote); + long count = 0; + + while (1) { + usleep(50); + count++; + + /* read a datagram from the socket (put result in bufin) */ + n=recvfrom(sd,bufin,MAXBUF,0,(struct sockaddr *)&remote,&len); + + /* print out the address of the sender */ + printf("Got a datagram from %s port %d\n", inet_ntoa(remote.sin_addr), ntohs(remote.sin_port)); + + if (n<0) { + perror("Error receiving data"); + } else { + printf("GOT %d BYTES (count = %d)\n",n, count); + /* Got something, just send it back */ + //sendto(sd,bufin,n,0,(struct sockaddr *)&remote,len); + } + } +} + +/* server main routine */ + +int main(int argc, char *argv[]) { + + /* + if(argc < 2) { + printf("usage: udp_server \n"); + exit(0); + } + + int port = atoi(argv[1]); + */ + + int ld; + struct sockaddr_in skaddr; + int length; + + // create socket + if ((ld = socket( PF_INET, SOCK_DGRAM, 0 )) < 0) { + printf("Problem creating socket\n"); + exit(1); + } + + // create address + skaddr.sin_family = AF_INET; + skaddr.sin_addr.s_addr = htonl(INADDR_ANY); + skaddr.sin_port = htons(0); + + // bind to address + if (bind(ld, (struct sockaddr *) &skaddr, sizeof(skaddr))<0) { + printf("error binding\n"); + exit(0); + } + + /* find out what port we were assigned and print it out */ + + length = sizeof( skaddr ); + if (getsockname(ld, (struct sockaddr *) &skaddr, &length)<0) { + printf("error getsockname\n"); + exit(1); + } + printf("server UDP port = %d\n",ntohs(skaddr.sin_port)); + + /* echo every datagram */ + echo(ld); + return(0); +}