Untitled

 avatar
unknown
plain_text
12 days ago
2.2 kB
4
Indexable
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<pthread.h>
#include<sys/select.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=windowsize+windowStart;
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:recieved acknowledgement for packet %s\n",buffer);
if(atoi(buffer)!=packets[windowStart])
{
printf("client:wrong acknowledgement! sending window 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 packets %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