Untitled
unknown
plain_text
9 months ago
2.5 kB
3
Indexable
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/select.h>
#include<pthread.h>
#define timeoutValue 5
#define packetCounter 5
#define windowSize 3
void sendWindowPacket(int*sockfd,struct sockaddr_in addr,int packet[],int windowStart,int windowEnd)
{
char buffer[1024];
while(windowStart<windowEnd)
{
bzero(buffer,1024);
sprintf(buffer,"%d",packet[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.1";
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 packet[packetCounter];
for(int i=0;i<packetCounter;++i)
packet[i]=i+1;
int windowStart=0;
int windowEnd=windowStart+windowsize;
int flag=1;
sendWindowPacket(&sockfd,addr,packet,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 packet again\n");
sendWindowPacket(&sockfd,addr,packet,windowStart,windowEnd);
}
else
{
printf("client received acknowledgement for packet%s \n",buffer);
if(atoi(buffer)!=packet[windowStart])
{
printf("client :wrong ack!sending packet again\n");
sendWindowPacket(&sockfd,addr,packet,windowStart,windowEnd);
}
else
{
windowStart++;
if(windowEnd<packetCounter)
windowEnd++;
if(windowStart!=windowEnd)
{
bzero(buffer,1024);
if(flag==1)
{
sprintf(buffer,"%d",packet[windowEnd]);
printf("Client: Sending packet %s \n",buffer);
sendto(sockfd,buffer,1024,0,(struct sockaddr *)&addr,sizeof(addr));
}
if(windowEnd==packetCounter)
flag=0;
}
}
}
}
sleep(1);
}
}Editor is loading...
Leave a Comment