コード例 #1
0
ファイル: callfcgi.c プロジェクト: dolda2000/ashd
static int startconn(void)
{
    if(*progspec) {
	if(nolisten == 0)
	    startlisten();
	else
	    startnolisten();
    }
    if(curaddr != NULL)
	return(sconnect());
    return(econnect());
}
コード例 #2
0
ファイル: peer.c プロジェクト: Surya361/networking_lab
void main(int argc,char *argv[])
{
	int port = 1235;
	fd_set read_fds,master_fds;
	int fdmax;
	int ssocket;
	struct sockaddr_in remoteaddr;

	//zeroing fds
	FD_ZERO(&read_fds);
	FD_ZERO(&master_fds);

	//getting socket
	ssocket = gettcpsock();
	fdmax = ssocket;
	//declaring server address
	struct sockaddr_in serveraddr;
	memset(&serveraddr,0,sizeof(serveraddr));
	serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(port);

	//binding the peer to address
	bindsock(ssocket,serveraddr);
	
	//adding listener 
	FD_SET(ssocket,&master_fds);

	//setting rtt and window size
	int window,rtt;
	printf("enter window size: ");
	scanf("%d",&window);
	printf("enter rtt: ");
	scanf("%d",&rtt);

	char str[30];
	printf("enter the file to be sent: ");
	scanf("%s",str);

	//open the file
	FILE *p;
	p = fopen(str,"r+");

	//packets and ackbuffer
	struct pack *datato;
	datato = malloc(100*sizeof(struct pack));
	struct pack *datafrom;
	datafrom = malloc(100*sizeof(struct pack));

	//make packets invalid
	makeinvalid(datato);
	makeinvalid(datafrom);

	//makepackets
	makepackets(datato,p);
	//print(datato);

	int sendbase = -1;
	int nextseq = 0;
	//litsening to port
	startlisten(ssocket,10);
	int res;

	int i;
	int sendsocket=-1;

	struct timeval tout;
	tout.tv_sec = 1;
	tout.tv_usec = 0;
	int z = 0;
	while(1)
	{
		read_fds = master_fds;
		//printf("was here\n");
		for(z=0;z<window*3;z++)
		{	
		if (select(fdmax+1, &read_fds, NULL, NULL, &tout) == -1) 
			errorrep("select");

		//printf("after select\n");

			for(i=0; i <= fdmax; i++)
			{
				//printf("checking socket %d\n",i);
				if(FD_ISSET(i,&read_fds))	
				{
					//printf("%d socket is set\n",i);
					if(i == ssocket)
					{
						//printf("incomming connection\n");
						struct sockaddr_in remote;
						int addrlen = sizeof(remote);
						int newfd = accept(ssocket,(struct sockaddr *)&remote,&addrlen);
						sendsocket = newfd;
						if(newfd < 0)
							errorrep("accept");
						else
						{
							FD_SET(newfd,&master_fds);
							if(newfd > fdmax)
							fdmax = newfd;
							printf("selectserver: new connection on socket %d\n",newfd);
						}
							
					}
					else
					{
						//printf("incomming packet\n");
						struct pack incomming;
						res = recv(i,&incomming,sizeof(incomming),0);
						if(res == 0)
						{
							printf("connection closed by socket: %d\n",i);
							FD_CLR(i,&master_fds);
						}
						if(res < 0)
							errorrep("reciving packet failed:");
						if(incomming.sno == -1)
							ackprocess(&incomming,datato,&sendbase);
						if(incomming.ackno == -1)
						{
							dataprocess(&incomming,datafrom);
							struct pack ackpacket;
							ackpacket.sno = -1;
							ackpacket.ackno = incomming.sno;
							printf("sending acknoledgement: %d",ackpacket.ackno);
							send(sendsocket,&ackpacket,sizeof(ackpacket),0);
						}	
								

					}
				}
			}
		}
			if(sendsocket != -1)
			{
				sendpacket(datato,&window,&sendbase,&nextseq,sendsocket);
				int ti = time(NULL);
				while((time(NULL)) < ti+rtt)
				{
					int a=0;
					a++; //does nothing
				}
				//print(datafrom);
			}

	}
	
	
}
コード例 #3
0
ファイル: peer.c プロジェクト: Surya361/networking_lab
void main(int argc,char *argv[])
{
	if(argc != 2)
	errorrep("invalid number of arguments\n");
	
	//getting port number
	int port = atoi(argv[1]);

	fd_set master;
	fd_set read_fds;
	fd_set write_fds;
	int fdmax;
	int lispeer;
	int newpeer;
	struct sockaddr_in remoteaddr;

	//zeroing fds
	FD_ZERO(&master);
	FD_ZERO(&read_fds);

	//getting socket
	lispeer = gettcpsock();

	//declaring server address
	struct sockaddr_in serveraddr;
	memset(&serveraddr,0,sizeof(serveraddr));
	serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(3300);
	
	//declaring server address
	struct sockaddr_in peeraddr;
	memset(&peeraddr,0,sizeof(peeraddr));
	peeraddr.sin_addr.s_addr = INADDR_ANY;
	peeraddr.sin_family = AF_INET;
	peeraddr.sin_port = htons(port);

	//binding the peer to address
	bindsock(lispeer,peeraddr);
	
	//adding listener 
	FD_SET(lispeer,&master);
	FD_SET(lispeer,&read_fds);

	//litsening to port
	startlisten(lispeer,10);
	
	//register with the dir server
	char filename[10];
	printf("enter names of files with the peer with spaces:");
	scanf("%[^\n]s",&filename[0]);
	fdmax = lispeer;
	int dserv = gettcpsock();
	if(fdmax < dserv)
	fdmax = dserv;
	int res = connect(dserv,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
	if(res < 0 )
	errorrep("connect");
	struct packlist list[50];
/*	*(buf+0) = '1';
	*(buf+1) = ' ';
	*(buf+2) = '\0';
	strcat(buf,argv[1]);
	strcat(buf,&username[1]);*/
	struct pack reg;
	reg.type = 1;
	reg.prt = port;
	strcpy(reg.filenames,&filename[0]);
	int pcklen = sizeof(struct pack);
	send(dserv,&reg,pcklen,0);
	struct sockaddr_in filepeer,remote;
	FILE *put;
	while(1)
	{
		char name[10];
		printf("enter file to be downloaded:");
		scanf("%s",&name[0]);

		struct pack req;
		req.type=2;
		req.prt = 0;
		strcpy(req.filenames,name);
		res = send(dserv,&req,sizeof(struct pack),0);
		if(res < 0)
		perror("req message failed to be sent");

		int fileport;
		res = recv(dserv,&fileport,sizeof(fileport),0);
		if(res < 0)
		perror("server failed to send the list");
		printf("received %d as the fileport\n",fileport);
		printf("do you want to get the file 1-yes 0-no\n");
		int answer;
		scanf("%d",&answer);
		if(answer)
		{
			int getfile = gettcpsock();
			memset(&filepeer,0,sizeof(filepeer));
			filepeer.sin_addr.s_addr = inet_addr("127.0.0.1");
			filepeer.sin_family = AF_INET;
			filepeer.sin_port = htons(fileport);

			res = connect(getfile,(struct sockaddr *)&filepeer,sizeof(filepeer));
			if(res < 0)
			errorrep("connection to getfile failed");

			if(fdmax < getfile)
			fdmax = getfile;
			FD_SET(getfile,&read_fds);


			res = send(getfile,&req,sizeof(struct pack),0);
			if(res < 0)
			errorrep("send file req");


			if (select(fdmax+1, &read_fds, &write_fds, NULL, NULL) == -1) 
			{
	         	   perror("select");
	          	   exit(4);
	        	}
			FILE *get;
			get = fopen(&name[0],"w+");
			int i;
			for(;;)
			{
			for(i=0; i<=fdmax; i++)
			{
				if(FD_ISSET(i,&read_fds))	
				{
					if(i == lispeer)
					{
						int addrlen = sizeof remote;
						int newfd = accept(lispeer,(struct sockaddr *)&remote,&addrlen);
						if(newfd < 0)
						errorrep("accept");
						else
						{
							FD_SET(newfd,&write_fds);
							if(newfd > fdmax)
							fdmax = newfd;
							printf("selectserver: new connection on socket %d\n",newfd);
							struct pack filereq;
							int res = recv(newfd,&filereq,sizeof(filereq),0);
							if(res < 0)
							errorrep("here\n");
							put = fopen(filereq.filenames,"r+");
						}
						
					}
					else
					{
						char buf[256];
						res = recv(i,buf,sizeof(buf),0);
						if(res == 0)
						printf("connection closed by socket %d\n",i);
						if(res < 0)
						{
							errorrep("recv");
							FD_CLR(i,&master);
							close(i);
						}
						printf("getting: %s\n",buf);
						fprintf(get,"%s",buf);
						//free(buf);
					}
				if(FD_ISSET(i,&write_fds))
					{
						char buf[256];
						int nu = fscanf(put,"%[^\n]s",&buf[0]);
						if(nu < 0)
						shutdown(i,2);
						else
						printf("sending: %s\n",buf);
						res = send(i,buf,sizeof(buf),0);
						//free(buf);
					}
				}
			}
			
			}			
			
		}
	}
	
}
コード例 #4
0
void main(int argc,char *argv[])
{
	/*if(argc != 2)
	errorrep("invalid number of arguments\n");
	
	//getting port number
	int port = atoi(argv[1]);*/

	fd_set master;
	fd_set read_fds;
	fd_set write_fds;
	int fdmax;
	int lispeer,p2,p3,p4;
	int newpeer;
	struct sockaddr_in remoteaddr;

	//zeroing fds
	FD_ZERO(&master);
	FD_ZERO(&read_fds);
	FD_ZERO(&write_fds);

	//getting socket
	lispeer = gettcpsock();
	p2 = gettcpsock();
	p3 = gettcpsock();
	p4 = gettcpsock();
	

	//declaring peer2 address
	struct sockaddr_in serveraddr;
	memset(&serveraddr,0,sizeof(serveraddr));
	serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(3301);
	
	//declaring peer3 address
	struct sockaddr_in paddr;
	memset(&paddr,0,sizeof(serveraddr));
	paddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	paddr.sin_family = AF_INET;
	paddr.sin_port = htons(3302);
	
	//decalring peer4 address
	struct sockaddr_in peaddr;
	memset(&peaddr,0,sizeof(serveraddr));
	peaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	peaddr.sin_family = AF_INET;
	peaddr.sin_port = htons(3303);
	
	//declaring server address
	struct sockaddr_in peeraddr;
	memset(&peeraddr,0,sizeof(peeraddr));
	peeraddr.sin_addr.s_addr = INADDR_ANY;
	peeraddr.sin_family = AF_INET;
	peeraddr.sin_port = htons(3300);

	//binding the peer to address
	bindsock(lispeer,peeraddr);
	
	//adding listener 
	FD_SET(lispeer,&master);
	FD_SET(lispeer,&read_fds);
	FD_SET(p2,&write_fds);
	FD_SET(p3,&write_fds);	
	FD_SET(p4,&write_fds);


	//litsening to port
	startlisten(lispeer,10);
	
	fdmax = lispeer;
	if(fdmax < p2)
		fdmax = p2;
	if(fdmax < p3)
		fdmax = p3;
	if(fdmax < p4)
		fdmax = p4;
	
/*	//register with the dir server
	char filename[10];
	printf("enter names of files with the peer with spaces:");
	scanf("%[^\n]s",&filename[0]);
	fdmax = lispeer;
	int dserv = gettcpsock();
	if(fdmax < dserv)
	fdmax = dserv;
	int res = connect(dserv,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
	if(res < 0 )
	errorrep("connect");
	struct packlist list[50];
/*	*(buf+0) = '1';
	*(buf+1) = ' ';
	*(buf+2) = '\0';
	strcat(buf,argv[1]);
	strcat(buf,&username[1]);*/
/*	struct pack reg;
	reg.type = 1;
	reg.prt = port;
	strcpy(reg.filenames,&filename[0]);
	int pcklen = sizeof(struct pack);
	send(dserv,&reg,pcklen,0);
	struct sockaddr_in filepeer,remote;
	FILE *put;*/
//	connect(p2,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
//	connect(p3,(struct sockaddr *)&paddr,sizeof(paddr));
//	connect(p4,(struct sockaddr *)&peaddr,sizeof(peaddr));
	int i;
	FILE *fp;
	fp = fopen("peer1","r+");
	char *buffer;
	int connections = 0;
	int newfd;
	for(;;)
	{
		FILE *p;
		p = fopen("rcv1","r+");
		if (select(fdmax+1, &read_fds,NULL, NULL,NULL) == -1) 
		{
         	   perror("select");
          	   exit(4);
        	}
		for(i=0;i<=fdmax;i++)
		{
			if(FD_ISSET(i,&read_fds))
			{
				if(i == lispeer)
				{
					int addrlen = sizeof remoteaddr;
					newfd = accept(lispeer,(struct sockaddr *)&remoteaddr,&addrlen);
					if(newfd < 0)
					errorrep("accept");
					else
					{
						printf("some one knocking connections\n");
						FD_SET(newfd,&read_fds);
						if(newfd > fdmax)
						fdmax = newfd;
						printf("selectserver: new connection on socket %d\n",newfd);
						if(connections == 0)
							connect(p2,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
						else
							if(connections == 1)
							connect(p3,(struct sockaddr *)&paddr,sizeof(paddr));
							else
								if(connections == 2)
									connect(p4,(struct sockaddr *)&peaddr,sizeof(peaddr));
						connections++;
						printf("connection number %d\n",connections);
					}
					
				}
				else
				{
					printf("in else\n");
					int nbytes;
					buffer = malloc(4*sizeof(char));
					if((nbytes = recv(i,buffer,4*sizeof(char),0)) <= 0)
						{
							if(nbytes == 0)
							printf("connection closed by socket %d\n",i);
							else
							errorrep("recv");
							FD_CLR(i,&read_fds);
							close(i);
						}
					else
						{
							printf("recived %d bytes\n",nbytes);
							//fread(buffer,sizeof(char),4,p);
							fseek(p,0,SEEK_END);
							int j;
							for(j=0;j<4;j++)
							fprintf(p,"%c",*(buffer+j));
							free(buffer);
						}
					
					int k;
					if(connections == 3)
					{
						buffer = malloc(4*sizeof(char));
						fread(buffer,sizeof(char),4,fp);
						/*for(k=0;k<=fdmax;k++)
						{
							if(FD_ISSET(k,&write_fds))
							{
								int sbytes = send(k,buffer,4*sizeof(char),0);
								printf("sent %d to %d",sbytes,k);
							}
					
						}*/
						send(p2,buffer,4,0);
						send(p3,buffer,4,0);
						send(p4,buffer,4,0);
					}
				}
			}
				
			
		}
		fclose(p);
	}
	/*while(1)
	{
		char name[10];
		printf("enter file to be downloaded:");
		scanf("%s",&name[0]);

		struct pack req;
		req.type=2;
		req.prt = 0;
		strcpy(req.filenames,name);
		res = send(dserv,&req,sizeof(struct pack),0);
		if(res < 0)
		perror("req message failed to be sent");

		int fileport;
		res = recv(dserv,&fileport,sizeof(fileport),0);
		if(res < 0)
		perror("server failed to send the list");
		printf("received %d as the fileport\n",fileport);
		printf("do you want to get the file 1-yes 0-no\n");
		int answer;
		scanf("%d",&answer);
		if(answer)
		{
			int getfile = gettcpsock();
			memset(&filepeer,0,sizeof(filepeer));
			filepeer.sin_addr.s_addr = inet_addr("127.0.0.1");
			filepeer.sin_family = AF_INET;
			filepeer.sin_port = htons(fileport);

			res = connect(getfile,(struct sockaddr *)&filepeer,sizeof(filepeer));
			if(res < 0)
			errorrep("connection to getfile failed");

			if(fdmax < getfile)
			fdmax = getfile;
			FD_SET(getfile,&read_fds);


			res = send(getfile,&req,sizeof(struct pack),0);
			if(res < 0)
			errorrep("send file req");


			if (select(fdmax+1, &read_fds, &write_fds, NULL, NULL) == -1) 
			{
	         	   perror("select");
	          	   exit(4);
	        	}
			FILE *get;
			get = fopen(&name[0],"w+");
			int i;
			for(;;)
			{
			for(i=0; i<=fdmax; i++)
			{
				if(FD_ISSET(i,&read_fds))	
				{
					if(i == lispeer)
					{
						int addrlen = sizeof remote;
						int newfd = accept(lispeer,(struct sockaddr *)&remote,&addrlen);
						if(newfd < 0)
						errorrep("accept");
						else
						{
							FD_SET(newfd,&write_fds);
							if(newfd > fdmax)
							fdmax = newfd;
							printf("selectserver: new connection on socket %d\n",newfd);
							struct pack filereq;
							int res = recv(newfd,&filereq,sizeof(filereq),0);
							if(res < 0)
							errorrep("here\n");
							put = fopen(filereq.filenames,"r+");
						}
						
					}
					else
					{
						char buf[256];
						res = recv(i,buf,sizeof(buf),0);
						if(res == 0)
						printf("connection closed by socket %d\n",i);
						if(res < 0)
						{
							errorrep("recv");
							FD_CLR(i,&master);
							close(i);
						}
						printf("getting: %s\n",buf);
						fprintf(get,"%s",buf);
						//free(buf);
					}
				if(FD_ISSET(i,&write_fds))
					{
						char buf[256];
						int nu = fscanf(put,"%[^\n]s",&buf[0]);
						if(nu < 0)
						shutdown(i,2);
						else
						printf("sending: %s\n",buf);
						res = send(i,buf,sizeof(buf),0);
						//free(buf);
					}
				}
			}
			
			}			
			
		}
	}*/
	
}
コード例 #5
0
ファイル: server1.c プロジェクト: Surya361/networking_lab
void main()
{
	fd_set master;
	fd_set read_fds;
	int fdmax;
	int listener;
	int newfd;
	char *buf;
	buf = malloc(256*sizeof(char));
	struct sockaddr_in remoteaddr;
	
	//zeroing fds
	FD_ZERO(&master);
	FD_ZERO(&read_fds);
	
	//getting socket
	listener = gettcpsock();

	//declaring server address
	struct sockaddr_in serveraddr;
	memset(&serveraddr,0,sizeof(serveraddr));
	serveraddr.sin_addr.s_addr = INADDR_ANY;
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(3300);
	
	//binding the server to address
	bindsock(listener,serveraddr);
	
	//adding listener to serv
	FD_SET(listener,&master);
	//litsening to the port
	startlisten(listener,10);
	
	fdmax = listener;
	
	int addrlen;
	
	FILE *p;
	p = fopen("peer","r+");
	if(p == NULL)
	errorrep("fopen");
	
	for(;;)
	{
		read_fds = master;
		if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1) 
		{
         	   perror("select");
          	   exit(4);
        	}
		int i;
		for(i=0; i<=fdmax; i++)
		{
			if(FD_ISSET(i,&read_fds))
			{
				if(i == listener)
				{
					addrlen = sizeof remoteaddr;
					newfd = accept(listener,(struct sockaddr *)&remoteaddr,&addrlen);
					if(newfd < 0)
					errorrep("accept");
					else
					{
						FD_SET(newfd,&master);
						if(newfd > fdmax)
						fdmax = newfd;
						printf("selectserver: new connection on socket %d\n",newfd);
					}
					
				}
				else
				{
					int nbytes;
					if((nbytes = recv(i,buf,sizeof buf,0)) <= 0)
						{
							if(nbytes == 0)
							printf("connection closed by socket %d\n",i);
							else
							errorrep("recv");
							FD_CLR(i,&master);
							close(i);
						}
					else
						{
							if(buf[0] == '1')
							fprintf(p,"%s",buf+2);
							if(buf[0] == '2')
							{
								printf("request for filename %s",(buf+2));
							}
						}
				}
			}
		}
		
	}
	
	
}