int main(int argc, char *argv[]) { int sd = UDP_Open(0); assert(sd > -1); struct sockaddr_in saddr; int rc = UDP_FillSockAddr(&saddr, "localhost", 10000); assert(rc == 0); //message msg = {.func="shutdown", .int1 = 0,.int2=0,.ret=-1,.name="root"}; message msg = {.func="lookup", .int1 = 0,.int2=0,.ret=1,.name=".."}; printf("CLIENT:: about to send message (%d)\n", rc); rc = UDP_Write(sd, &saddr, (char *) &msg, sizeof(message)); printf("CLIENT:: sent message (%d)\n", rc); fd_set r; FD_ZERO(&r); FD_SET(sd, &r); struct timeval t; t.tv_sec = 4; t.tv_usec = 0; rc = select(sd + 1, &r, NULL, NULL, &t); if (rc > 0) { struct sockaddr_in raddr; msg.ret = -19; int rc = UDP_Read(sd, &raddr,(char *) &msg, sizeof(message)); printf("CLIENT:: read %d bytes (message: '%d')\n", rc, msg.ret); } else { printf("client timed out\n"); //rc = UDP_Write(sd, &saddr, (char *) &msg, sizeof(message)); //rc = select(sd + 1, &r, NULL, NULL, &t); } return 0; }
//Using first char byte as acknowledge //transmits data and waits for acknowledge //CANNOT USE FULL BUFFER //DATA WILL BE STORED AT THE LAST 3 BYTES OF THE BUFFER int transmit(char message[BUFFER_SIZE]) { if (DEBUG) printf("USING THIS OLD TRANSMIT!!!! WAHH\r\n"); time_t tstart,tnow; int ackd = 0; //message[BUFFER_SIZE-3] = messageid; //message[BUFFER_SIZE-2] = 'k'; //message[BUFFER_SIZE-1] = 'z'; //watch for this key TODO remove while (!ackd) { tstart = time(NULL); rc = UDP_FillSockAddr(&saddr, "best-mumble.cs.wisc.edu", 10021); assert(rc == 0); sendpacket(message); int timeout = 0; while (!timeout) { int rxd = receive(); tnow = time(NULL); if ((rxd == 0)&&(messageid == (int)buffer[0])&&(buffer[1] == 'a')&&(buffer[2] == 'c')&&(buffer[3] == 'k')) { //got valid ack if (DEBUG) printf("SUCCESS received correct acknowledge!\r\n"); ackd = 1; timeout = 1; } int diff = difftime(tnow, tstart); if (diff > TIMEOUT) { timeout = 1; if (DEBUG) printf("Timed out! Resending...\r\n"); } } } messageid++; //increment AFTER getting valid ack return 0; }
//sets up socket void setupconnection() { sd = UDP_Open(0); assert(sd > -1); rc = UDP_FillSockAddr(&saddr, "best-mumble.cs.wisc.edu", 10021); assert(rc == 0); messageid = 0; fcntl(sd, F_SETFL, O_NONBLOCK); //set to non-blocking }
int MFS_Init(char *hostname, int port){ sd = UDP_Open(0); assert(sd > -1); int rc = UDP_FillSockAddr(&saddr, hostname, port); assert(rc == 0); printf("CLIENT:: about to send message (%d)\n", rc); return 0; }
int MFS_Init(char * hostname, int port) { sd = UDP_Open(0); assert(sd > -1); rc = UDP_FillSockAddr(&saddr, hostname, port); if (rc != 0) { fprintf(stderr,"Error: cannot fill socket address, invalid hostname or port number \n"); exit(0); } return 0; }
//Library routines int MFS_Init(char* hostname, int port) { int sd = UDP_Open(0); assert(sd > -1); struct sockaddr_in saddr; int rc = UDP_FillSockAddr(&saddr, hostname, port); assert(rc == 0); //Fill in the common com struct com_t.sd = sd; com_t.addr = saddr; #ifdef DEBUG printf("\n----Calling MFS_Init to server %s at port %d\n", hostname, port); #endif printf(" CLIENT:: about to send the message (%d)\n", rc); return 0; }
int sendPacket(char *hostname, int port, Net_Packet *sentPacket, Net_Packet *responsePacket, int maxTries) { int sd = UDP_Open(0); if(sd < -1) { perror("Error opening connection.\n"); return -1; } struct sockaddr_in addr, addr2; int rc = UDP_FillSockAddr(&addr, hostname, port); if(rc < 0) { perror("Error looking up host.\n"); return -1; } fd_set rfds; struct timeval tv; tv.tv_sec=3; tv.tv_usec=0; do { FD_ZERO(&rfds); FD_SET(sd,&rfds); UDP_Write(sd, &addr, (char*)sentPacket, sizeof(Net_Packet)); if(select(sd+1, &rfds, NULL, NULL, &tv)) { rc = UDP_Read(sd, &addr2, (char*)responsePacket, sizeof(Net_Packet)); if(rc > 0) { UDP_Close(sd); return 0; } }else { maxTries -= 1; } }while(1); }
int MFS_Init(char *hostname, int port) { INIT: // printf("MFS_Init CKP\n"); port_num=port; sd = UDP_Open(0); assert(sd > -1); int rc = UDP_FillSockAddr(&saddr,hostname,port_num); saddr=saddr; assert(rc == 0); struct sockaddr_in raddr; // MFS_Transmit_t message; sprintf(message.name,"Init"); message.transmit=0; //INIT: rc = transmit(); fd_set r; FD_ZERO(&r); FD_SET(sd,&r); struct timeval t; t.tv_sec=5; t.tv_usec=0; int rc2 = select(sd+1,&r,NULL,NULL,&t); printf("Running %s on %d and select returned =%d\n",hostname,port_num,rc); if(rc2>0) { rc = UDP_Read(sd, &raddr, (char*)&reply_rec, sizeof(return_struct_t)); // printf("TIMEOUT\n"); // exit(1); } else { // printf("TIMEOUT\n"); goto INIT; } return(0); }
int MFS_Init(char *hostname, int port) { if (DEBUG) printf("MFS_Init called with hostname %s and port %d.\n", hostname, port); //INIT VARIABLES //messageid = 0; //start the messageid count //PRIMATIVE CHECKS if (port < 0 || hostname == NULL){ if (DEBUG) printf("ERROR: MFS_Init received invalid parameters.\n"); return -1; } //SET UP SOCKET sd = UDP_Open(0); if (sd < 0){ if (DEBUG) printf("UDP_Open in MFS_Init failed.\n"); return -1; } rc = UDP_FillSockAddr(&saddr, hostname, port); if (rc < 0){ if (DEBUG) printf("UDP_FillSockAddr in MFS_Init failed.\n"); return -1; } fcntl(sd, F_SETFL, O_NONBLOCK); //set to non-blocking //SET UP PACKET //sprintf(message, "This is a test. #YOLO THIS IS DIFFERENT"); message[KEY_BYTE] = 'k'; message[COMMAND_BYTE] = 0; message[MESSAGE_ID] = messageid; //SEND PACKET transmit(); return 0; }
int main(int argc, char *argv[]) { int sd = UDP_Open(0); assert(sd > -1); struct sockaddr_in saddr; int rc = UDP_FillSockAddr(&saddr, "procyon.cs.wisc.edu", 1345); assert(rc == 0); printf("CLIENT:: about to send message (%d)\n", rc); char message[BUFFER_SIZE]; sprintf(message, "hello world"); rc = UDP_Write(sd, &saddr, message, BUFFER_SIZE); // printf("CLIENT:: sent message (%d)\n", rc); if (rc > 0) { struct sockaddr_in raddr; int rc = UDP_Read(sd, &raddr, buffer, BUFFER_SIZE); printf("CLIENT:: read %d bytes (message: '%s')\n", rc, buffer); } return 0; }
int MFS_Init(char *hostname, int port) { fd = socket(AF_INET, SOCK_DGRAM, 0); UDP_FillSockAddr(&addr, hostname, port); return 0; }