void CreateTcpSocket2() { /*-------------------------Create a TCP Socket 2-----------------------------*/ t_server3.sin_family = AF_INET; t_server3.sin_addr.s_addr = htonl(INADDR_ANY); t_server3.sin_port = htons(10253); tcp_sock3 = socket (AF_INET,SOCK_STREAM,0); if (tcp_sock3 <0) { perror("Error in Creating Socket"); exit(-1); } reusePort(tcp_sock3); /*--------------------Binding to the TCP Server port-----------------------*/ if ((bind( tcp_sock3, (SA *) &t_server3, sizeof(t_server3))) == -1) { close(tcp_sock3); perror("Error in Binding in Socket 1"); exit(-1); } /*-------------------listen for the clients-----------------------*/ listen(tcp_sock3,22); }
main(int argc, char* argv[]) { int sd; struct sockaddr_in server; char buf[512]; int rc; int msg_flags; struct sockaddr_in cliaddr; int len; struct sctp_sndrcvinfo sri; struct sctp_event_subscribe evnts; int stream_increment=1; struct sctp_initmsg initm; server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); server.sin_port = htons(atoi(argv[1])); sd = socket (AF_INET,SOCK_SEQPACKET,IPPROTO_SCTP); reusePort(sd); if ( bind( sd, (SA *) &server, sizeof(server) ) < 0 ){ printf("error binding\n"); exit(-1) ; } listen(sd, 1); for(;;){ len = sizeof(struct sockaddr_in); rc = sctp_recvmsg(sd, buf, sizeof(buf), (SA *)&cliaddr, &len, &sri, &msg_flags); buf[rc]= (char) NULL; printf("sctp_recvmsg: %s\n", buf); rc = recvfrom (sd, buf, sizeof(buf), 0, (SA *) &cliaddr, &len); buf[rc]= (char) NULL; printf("recvfrom: %s\n", buf); len = sizeof(cliaddr); getpeername(sd, (SA *) &cliaddr, &len); printf("remote addr: %s, port %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, buf, sizeof(buf)), ntohs(cliaddr.sin_port)); } }
void CreateUdpSocket() { sprintf(bufip,"%d.%d.%d.%d",x1,x2,x3,x4); Multicastip = bufip; udp_server.sin_family=AF_INET; udp_server.sin_addr.s_addr=inet_addr(Multicastip); udp_server.sin_port=htons(px); //getSharedMem(); udp_socket_fd= socket(AF_INET,SOCK_DGRAM,0); if (udp_socket_fd<0) { perror("opening datagram socket"); exit(-1); } reusePort(udp_socket_fd); if ( bind( udp_socket_fd, (SA *) &udp_server, sizeof(udp_server) ) < 0 ) { close(udp_socket_fd); perror("binding name to datagram socket"); exit(-1); } joinGroup(udp_socket_fd, Multicastip); }
int main(int argc, char* argv[]) { struct sockaddr_in client; //Validate input if (argc != 2) { cout << "Usage: panserver <portnumber>" << endl; return -1; } // initialize shared memory initSharedMem(); // Initialize the ports panel.server.sin_port = htons(atoi(argv[1])); audience.server.sin_port = htons(atoi(argv[1])+1); /** Create socket on which to send and receive */ if ( panel.CreatSocket() < 0 ) // create panel socket return -1; if ( audience.CreatSocket() < 0 ) // create panel socket return -1; reusePort(panel.socket_s); //reuse the binding port when execute program if ( panel.BindConnection() < 0 ) // Check for binding errors return -1; reusePort(audience.socket_s);//reuse the binding port when execute program if ( audience.BindConnection() < 0 ) // Check for binding errors return -1; /** get panel port information and prints it out */ if ( panel.GetSocketName() ) // check socket name validity return -1; /** get audience port information and prints it out */ if ( audience.GetSocketName() ) // check socket name validity return -1; /** accept TCP connections from clients and fork a process to serve each */ listen(panel.socket_s,10); listen(audience.socket_s,10); for(;;){ audience_pid = fork(); /* This is the audience server */ if ( audience_pid == 0) { signal (SIGQUIT, SIG_IGN); signal (SIGINT, SIG_IGN); signal (SIGTSTP,SIG_IGN); signal (SIGTERM,SIG_IGN); cout << "Forked AUDIENCE Server, PID=" << getpid() << endl; ServAudience(audience, client); } else { //This is to handle the quit function if (signal(SIGQUIT, CloseMeeting) == SIG_ERR) { fprintf(stderr, "cannot set handler for SIGQUIT\n"); } //list people in the room if (signal(SIGINT, inthandle) == SIG_ERR) { fprintf(stderr, "cannot set handler for SIGINT\n"); } //Handle dead signal if (signal(SIGTERM, SomeoneIsLeaving) == SIG_ERR) { fprintf(stderr, "cannot set handler for SIGTERM\n"); } //Handle ctrl+Z if (signal(SIGTSTP, AllowQA) == SIG_ERR) { fprintf(stderr, "cannot set handler for SIGTSTP\n"); } cout << "AUDIENCE server started at port: (" << ntohs(audience.server.sin_port) << ")" << endl; cout << "PANELIST server started at port: (" << ntohs(panel.server.sin_port) << ")" << endl; ServPanelist(panel, client); } wait(NULL); } }
main(int argc, char *argv[]) { //checking the arguments if (argc != 4 || argc == 2 ) { printf("Usage: ChatClient <shost> <sport> <u/m>\n"); printf("e.g.: ChatClient atria 10123 u \n"); exit(1); } if ( (hp = gethostbyname(argv[1])) == NULL ) { addr.sin_addr.s_addr = inet_addr(argv[1]); if ((hp = gethostbyaddr((char *) &addr.sin_addr.s_addr, sizeof(addr.sin_addr.s_addr),AF_INET)) == NULL) { fprintf(stderr, "Can't find host %s\n", argv[1]); exit(-1); } } printf("\n>> UMChatServer :\t %s\n", hp->h_name); bcopy ( hp->h_addr, &(server.sin_addr), hp->h_length); printf(">> UMChatServer IP:\t %s \n", inet_ntoa(server.sin_addr)); server.sin_family = AF_INET; server.sin_port = htons(atoi(argv[2])); sd = socket (AF_INET,SOCK_STREAM,0); if ( connect(sd, (SA *) &server, sizeof(server)) < 0 ) { close(sd); perror("connecting to server socket"); exit(0); } length = sizeof(client); if ( getsockname (sd, (SA *)&client,&length) ) { perror("getting socket name"); exit(0); } TCPPort = ntohs(client.sin_port); userName=getlogin(); if(strcmp(argv[3],"m" )== 0) { //send logic char octet='0'; sprintf(buf, "%c", octet); sprintf(userBuf, "%s", userName); if (send(sd,userBuf, sizeof(userBuf), 0) <0 ) perror("sending user name"); usleep(1000); if (send(sd,buf , sizeof(buf), 0) <0 ) perror("sending MIP message"); } if(strcmp(argv[3],"u" )== 0) { //send logic char octet='1'; sprintf(buf, "%c", octet); sprintf(userBuf, "%s", userName); if (send(sd,userBuf, sizeof(userBuf), 0) <0 ) perror("sending user name"); usleep(1000); if (send(sd,buf , sizeof(buf), 0) <0 ) perror("sending MIP message"); } printf(">> ChatClient TCP Port:\t %d\n", TCPPort); //multicast if(strcmp(argv[3],"m" )== 0) { if( (rc=recv(sd, MIP, sizeof(MIP), 0)) < 0){ perror("receiving MIP message"); exit(-1); } if (rc > 0){ MIP[rc]='\0'; printf(">> MCAST IP:\t %s", MIP); } if( (rc=recv(sd, MPort, sizeof(MPort), 0)) < 0){ perror("receiving MPort message"); exit(-1); } if (rc > 0){ MPort[rc]='\0'; printf(">> MCAST Port:\t %s\n", MPort); } if( (rc=recv(sd, listNumber, sizeof(listNumber), 0)) < 0){ perror("receiving list message"); exit(-1); } if (rc > 0){ listNumber[rc]='\0'; printf(">> LIST Code:\t %s\n", listNumber); } if( (rc=recv(sd, exitNumber, sizeof(exitNumber), 0)) < 0){ perror("receiving exit message"); exit(-1); } if (rc > 0){ exitNumber[rc]='\0'; printf(">> END Code:\t %s\n", exitNumber); } //multicast MulticastIPAddress = MIP; UDPPort = htons(atoi( MPort ) ); LocalHostR.sin_family = AF_INET; LocalHostR.sin_port = UDPPort; LocalHostR.sin_addr.s_addr = htonl(INADDR_ANY); if ((UDPsocketR = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("can't create UDP socket R: \n"); exit(-1); } reusePort(UDPsocketR); if (bind(UDPsocketR, (SA *) & LocalHostR, sizeof(LocalHostR)) < 0) { printf("error in bind R\n"); exit(-1); } LocalHostS.sin_family = AF_INET; LocalHostS.sin_port = htons(TCPPort); LocalHostS.sin_addr.s_addr = htonl(INADDR_ANY); if ((UDPsocketS = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("can't create UDP socket S: \n"); exit(-1); } if (bind(UDPsocketS, (SA *) & LocalHostS, sizeof(LocalHostS)) < 0) { printf("error in bind S\n"); exit(-1); } TimeToLive = 2; setTTLvalue(UDPsocketR, &TimeToLive); loop = 1; /* enable loopback */ setLoopback(UDPsocketR, loop); joinGroup(UDPsocketR, MIP); signal( SIGQUIT, QUIThandler ); if (fork() == 0) sendMessage(0, UDPsocketS); getMessage(UDPsocketR, 1); } //unicast if(strcmp(argv[3],"u" )== 0) { if( (rc=recv(sd, MPort, sizeof(MPort), 0)) < 0){ perror("receiving MPort message"); exit(-1); } if (rc > 0){ MPort[rc]='\0'; printf(">> MCAST Port:\t %s\n", MPort); } if( (rc=recv(sd, listNumber, sizeof(listNumber), 0)) < 0){ perror("receiving list message"); exit(-1); } if (rc > 0){ listNumber[rc]='\0'; printf(">> LIST Code:\t %s\n", listNumber); } if( (rc=recv(sd, exitNumber, sizeof(exitNumber), 0)) < 0){ perror("receiving exit message"); exit(-1); } if (rc > 0){ exitNumber[rc]='\0'; printf(">> END Code:\t %s\n", exitNumber); } //creates udp socket UDPPort = htons(atoi( MPort ) ); LocalHostS.sin_family = AF_INET; LocalHostS.sin_port =UDPPort; LocalHostS.sin_addr.s_addr = htonl(INADDR_ANY); if ((UDPsocketS = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("can't create UDP socket S: \n"); exit(-1); } if (bind(UDPsocketS, (SA *) & LocalHostS, sizeof(LocalHostS)) < 0) { printf("error in bind S\n"); exit(-1); } if (fork() == 0) sendMessage(0, UDPsocketS); getMessage(UDPsocketS, 1); } }
main(int argc, char *argv[]) { FD_SET(0, &full_fd); if (argc != 4) { printf("Usage: ChatClient <host> <port> <m|u|s>\n"); printf("e.g.: ChatClient atria 10123 u \n"); exit(1); } if ((username = getlogin()) == NULL) perror("Who are you?\n"); if ( (hp = gethostbyname(argv[1])) == NULL ) { addr.sin_addr.s_addr = inet_addr(argv[1]); if ((hp = gethostbyaddr((char *) &addr.sin_addr.s_addr, sizeof(addr.sin_addr.s_addr),AF_INET)) == NULL) { fprintf(stderr, "Can't find host %s\n", argv[1]); exit(-1); } } printf("\n UMChatServer --> %s\n", hp->h_name); bcopy ( hp->h_addr, &(TCPserver.sin_addr), hp->h_length); bcopy ( hp->h_addr, &(UDPserver.sin_addr), hp->h_length); bcopy ( hp->h_addr, &(SCTP_Qserver.sin_addr), hp->h_length); printf(" UMChatServer IP: %s \n", inet_ntoa(TCPserver.sin_addr)); SCTP_Qserver.sin_family = AF_INET; TCPserver.sin_family = AF_INET; UDPserver.sin_family = AF_INET; TCPserver.sin_port = htons(atoi(argv[2])); if (strcmp(argv[3], "s") == 0) TYPE=S; if (strcmp(argv[3], "m") == 0) TYPE=M; if (strcmp(argv[3], "u") == 0) TYPE=U; if (TYPE == S) { SCTPsocket = socket (AF_INET,SOCK_STREAM,IPPROTO_SCTP); if ( connect(SCTPsocket, (SA *) &TCPserver, sizeof(TCPserver)) < 0 ) { close(SCTPsocket); perror("connecting to UMChatServer socket"); exit(0); } if ( send(SCTPsocket, username, strlen(username), 0) < 0) perror("send username message"); length = sizeof(client); if ( getsockname (SCTPsocket, (SA *)&client,&length) ) { perror("getting socket name"); exit(0); } SCTPPort = ntohs(client.sin_port); } else { TCP_socket = socket (AF_INET,SOCK_STREAM,0); if ( connect(TCP_socket, (SA *) &TCPserver, sizeof(TCPserver)) < 0 ) { close(TCP_socket); perror("connecting to UMChatServer socket....."); exit(0); } if ( send(TCP_socket, username, strlen(username), 0) < 0) perror("send username message"); length = sizeof(client); if ( getsockname (TCP_socket, (SA *)&client,&length) ) { perror("getting socket name"); exit(0); } TCPPort = ntohs(client.sin_port); } if (TYPE == M) { if ( send(TCP_socket, MChat, strlen(MChat), 0) < 0) perror("send MChat message"); if( (rc=recv(TCP_socket, MIP, sizeof(MIP), 0)) < 0) perror("receiving MIP message"); if (rc > 0) { MIP[rc]='\0'; printf("THE MCAST IP --> %s", MIP); } } if (TYPE == U) { if ( send(TCP_socket, UChat, strlen(UChat), 0) < 0) perror("send UChat message"); } if (TYPE == S) { if( (rc=recv(SCTPsocket, MPort, sizeof(MPort), 0)) < 0) perror("receiving MPort message 01"); if (rc > 0) { MPort[rc]='\0'; printf(" THE MCAST Port --> %s\n", MPort); } strcat(record,inet_ntoa(SCTP_Qserver.sin_addr)); strcat(record,":"); strcat(record,MPort); sprintf(ServerAddr, "[%s] ", record); UDPPort = htons(atoi( MPort ) ); SCTP_Qserver.sin_port = UDPPort; if( (rc=recv(SCTPsocket, RandomCODE1, sizeof(RandomCODE1), 0)) < 0) perror("receiving RandomCODE1 message"); if (rc > 0){ RandomCODE1[rc]='\0'; printf(" THE LIST Code --> %s\n", RandomCODE1); } if( (rc=recv(SCTPsocket, RandomCODE2, sizeof(RandomCODE2), 0)) < 0) perror("receiving RandomCODE2 message"); if (rc > 0){ RandomCODE2[rc]='\0'; printf("THE END Code --> %s\n\n", RandomCODE2); } } else { if( (rc=recv(TCP_socket, MPort, sizeof(MPort), 0)) < 0) perror("receiving MPort message"); if (rc > 0) { MPort[rc]='\0'; printf(" THE MCAST Port --> %s\n", MPort); } strcat(record,inet_ntoa(UDPserver.sin_addr)); strcat(record,":"); strcat(record,MPort); sprintf(ServerAddr, "[%s] ", record); UDPPort = htons(atoi( MPort ) ); UDPserver.sin_port = UDPPort; if( (rc=recv(TCP_socket, RandomCODE1, sizeof(RandomCODE1), 0)) < 0) perror("receiving RandomCODE1 message"); if (rc > 0){ RandomCODE1[rc]='\0'; printf(" THE LIST Code --> %s\n", RandomCODE1); } if( (rc=recv(TCP_socket, RandomCODE2, sizeof(RandomCODE2), 0)) < 0) perror("receiving RandomCODE2 message"); if (rc > 0){ RandomCODE2[rc]='\0'; printf(" THE END Code --> %s\n\n", RandomCODE2); } } LocalHostUS.sin_family = AF_INET; LocalHostUS.sin_port = htons(TCPPort); LocalHostUS.sin_addr.s_addr = htonl(INADDR_ANY); LocalHostSCTP_Q.sin_family = AF_INET; LocalHostSCTP_Q.sin_port = htons(client.sin_port)+1; LocalHostSCTP_Q.sin_addr.s_addr = htonl(INADDR_ANY); MulticastIPAddress = MIP; UDPPort = htons(atoi( MPort ) ); LocalHostUR.sin_family = AF_INET; LocalHostUR.sin_port = UDPPort; LocalHostUR.sin_addr.s_addr = htonl(INADDR_ANY); GroupAddress.sin_family = AF_INET; GroupAddress.sin_port = UDPPort; GroupAddress.sin_addr.s_addr = inet_addr(MulticastIPAddress); if ((UDPsocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) perror("can't create UDP socket S: \n"); if (bind(UDPsocket, (SA *) & LocalHostUS, sizeof(LocalHostUS)) < 0) printf("error in bind UDP S\n"); FD_SET(UDPsocket, &full_fd); if ((SCTP_Qsocket = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)) < 0) perror("can't create SCTP-Q socket S: \n"); reusePort(SCTP_Qsocket); if (bind(SCTP_Qsocket, (SA *) & LocalHostSCTP_Q, sizeof(LocalHostSCTP_Q)) < 0) printf("error in bind SCTP_Q S\n"); FD_SET(SCTP_Qsocket, &full_fd); if (TYPE == M) { if ((MCASTsocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) perror("can't create UDP MCASTsocket R: \n"); reusePort(MCASTsocket); if (bind(MCASTsocket, (SA *) & LocalHostUR, sizeof(LocalHostUR)) < 0) perror("error in bind R\n"); joinGroup(MCASTsocket, MIP); FD_SET(MCASTsocket, &full_fd); } TimeToLive = 2; setTTLvalue(UDPsocket, &TimeToLive); loop = 1; setLoopback(UDPsocket, loop); signal( SIGQUIT, QUIThandler ); signal( SIGINT, INThandler); char recvBuf[MAXLINE]; int bytes = 0; if (TYPE == U) { if (sendto(UDPsocket,EchoTest,strlen(EchoTest),0,(SA *)&UDPserver,sizeof(UDPserver)) < 0) perror("error in sendto EchoTest UDPsocket \n"); } if (TYPE == S) { char EchoTest[100]; strcpy(EchoTest,"WELCOME, New SCTP: "); strcat(EchoTest,username); strcat(EchoTest,"\n"); if (sendto(SCTP_Qsocket,EchoTest,strlen(EchoTest),0,(SA *)&SCTP_Qserver,sizeof(SCTP_Qserver)) < 0) perror("error in send to EchoTest SCTP_Qsocket \n"); } if (TYPE == M) { if (sendto(UDPsocket,EchoTest,strlen(EchoTest),0,(SA *)&UDPserver,sizeof(UDPserver)) < 0) perror("error in send to EchoTest UDPsocket \n"); if (sendto(MCASTsocket,EchoTest,strlen(EchoTest),0,(SA *)&UDPserver,sizeof(UDPserver)) < 0) perror("error in send to EchoTest MCASTsocket \n"); if ( (bytes = recvfrom(UDPsocket, recvBuf, MAXLINE, 0, (SA *) &from, &fromlen) ) < 0) perror("error in rec from EchoTest UDPsocket \n"); } sleep(1); selectHandle(); }