goback
unknown
plain_text
4 days ago
2.3 kB
3
Indexable
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<sys/types.h> #include<sys/select.h> #include<arpa/inet.h> #include<stdlib.h> #include<pthread.h> #define timeoutValue 5 #define packetCount 5 #define windowSize 3 void sendWindowPackets( int *sockfd,struct sockaddr_in addr,int packets[],int windowStart, int windowEnd) { char buffer[1024]; while(windowStart<windowEnd) { bzero(buffer,1024); sprintf(buffer," %d", packets[windowStart]); printf(" Client : Sending packet %s \n", buffer); sendto(*sockfd,buffer, 1024,0,(struct sockaddr*)&addr, sizeof(addr)); windowStart++; } } void main() { char *ip = " 127.0.0.100 "; int port = 5555; pthread_t timeoutThread; int sockfd; struct sockaddr_in addr; char buffer[1024]; socklen_t addr_size; sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) { perror ( " [ -] Socket error " ); exit(1); } memset(&addr,'\0', sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = inet_addr(ip); int packets[packetCount]; for(int i=0;i<packetCount;++i) packets[i]=i+1; int windowStart=0; int windowEnd=windowStart+windowSize; int flag=1; sendWindowPackets(&sockfd,addr,packets,windowStart,windowEnd); while(windowStart!=windowEnd) { bzero(buffer,1024); addr_size=sizeof(addr); struct timeval timeout; timeout.tv_sec=timeoutValue; timeout.tv_usec= 0; if(setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,&timeout,sizeof(timeout))<0) printf(" Error \n"); else { bzero(buffer,1024); addr_size= sizeof(addr); int rec=recvfrom(sockfd,buffer,1024,0,(struct sockaddr*) &addr, &addr_size); if(rec<0) { printf(" Client : Timeout error! Sending window packets again \n "); sendWindowPackets(&sockfd,addr,packets,windowStart,windowEnd); } else { printf(" Client:Received acknowledgement for packet %s \n",buffer); if(atoi(buffer)!=packets[windowStart]) { printf("Client : Wrong acknowledgement!Sending window packets again \n"); sendWindowPackets(&sockfd,addr,packets, windowStart,windowEnd); } else { windowStart++; if(windowEnd<packetCount) windowEnd++; if(windowStart!=windowEnd) { bzero(buffer,1024); if(flag==1) { sprintf(buffer,"%d",packets[windowEnd -1]); printf("Client : Sending packet %s \n" , buffer); sendto(sockfd,buffer,1024,0,(struct sockaddr*)&addr,sizeof(addr)); } if(windowEnd==packetCount) flag=0; } } } } sleep(1); } }
Editor is loading...
Leave a Comment