static int startconn(void) { if(*progspec) { if(nolisten == 0) startlisten(); else startnolisten(); } if(curaddr != NULL) return(sconnect()); return(econnect()); }
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); } } }
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,®,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); } } } } } } }
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,®,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); } } } } } }*/ }
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)); } } } } } } }