diff options
author | sotech117 <michael_foiani@brown.edu> | 2023-09-14 19:02:36 -0400 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2023-09-14 19:02:36 -0400 |
commit | bbfbcc6c936b16568d96619f02f8bb081c190b2a (patch) | |
tree | 4b2cd1495a2de14904cb6587263620655c954f6e /client.c | |
parent | 053ef4fa8eca86fc3b8a5b81bdd0abe599413c65 (diff) |
finish warmup, hopefully
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 65 |
1 files changed, 50 insertions, 15 deletions
@@ -14,7 +14,7 @@ #include <arpa/inet.h> -#define PORT "3490" // the port client will be connecting to +#include "protocol.h" #define MAXDATASIZE 100 // max number of bytes we can get at once @@ -30,14 +30,14 @@ void *get_in_addr(struct sockaddr *sa) int main(int argc, char *argv[]) { - int sockfd, numbytesrecv, numbytessent; + int sockfd, numbytesrecv, numbytessent, recvbytes; char buf[MAXDATASIZE]; struct addrinfo hints, *servinfo, *p; int rv; char s[INET6_ADDRSTRLEN]; - if (argc != 3) { - fprintf(stderr,"usage: client hostname\n"); + if (argc != 4) { + fprintf(stderr,"<server IP> <server port> <listener port>\n"); exit(1); } @@ -45,7 +45,10 @@ int main(int argc, char *argv[]) hints.ai_family = AF_INET; // only IPv4 hints.ai_socktype = SOCK_STREAM; - if ((rv = getaddrinfo(argv[2], PORT, &hints, &servinfo)) != 0) { + char* tcpPort = argv[2]; // port we use to connect to server's tcp stream + char* udpPort = argv[3]; // port we use to connect to server's udp info and command + + if ((rv = getaddrinfo(argv[1], tcpPort, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); return 1; } @@ -74,26 +77,58 @@ int main(int argc, char *argv[]) inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr), s, sizeof s); - printf("client: connecting to %s\n", s); + // printf("client: connecting to %s\n", s); freeaddrinfo(servinfo); // all done with this structure - if ((numbytesrecv = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) { + struct Welcome msg; + // recv the message, check for errors too + if ((recvbytes = recv(sockfd, (char*)&msg, sizeof(struct snowcast_message), 0)) == -1) { perror("recv"); exit(1); } - - buf[numbytesrecv] = '\0'; - - printf("client: received '%s'\n",buf); - - if ((numbytessent = send(sockfd, "Welcome", 7, 0)) == -1) { + // print the num bytes received + // printf("client: received '%s'\n", msg); + // printf("size of '%d'\n", recvbytes); + printf("Welcome to Snowcast! The server has %d stations.\n", msg.numStations); + // printf("type %d", msg.replyType); + // close(sockfd); + + // if ((numbytesrecv = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) { + // perror("recv"); + // exit(1); + // } + // buf[numbytesrecv] = '\0'; + + // printf("client: received '%s'\n",buf); + + // make a struct for the message, number is thennubmer of stations + struct Hello hello; + hello.commandType = 0; + // convert updPort to an int + int udpPortInt = atoi(udpPort); + hello.udpPort = htonl(udpPortInt); + + if ((numbytessent = send(sockfd, &hello, sizeof(struct Hello), 0)) == -1) { perror("send"); exit(1); } - buf[numbytessent] = '\0'; - + // make new struct for the incoming message + // buf[numbytesrecv] = '\0'; + // char bufff[MAXDATASIZE]; + // if ((recvbytes = recv(sockfd, bufff, MAXDATASIZE, 0)) == -1) + // { + // perror("recv"); + // exit(1); + // } + // bufff[recvbytes] = '\0'; + + // // print the num bytes received + // printf("client: received '%d'\n", recvbytes); + + // //printf("Welcome to Snowcast! The server has %d stations.\n", ntohl(msg.number)); + // printf("%s", bufff); close(sockfd); return 0; |