コード例 #1
0
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);
		
}
コード例 #2
0
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));

   }
}
コード例 #3
0
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);
}
コード例 #4
0
ファイル: panserver.cpp プロジェクト: hungvietdo/CS576
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); 
    }
}
コード例 #5
0
ファイル: UMChatClient.c プロジェクト: swarajwankhade/dnp
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);
		
	}
	
}
コード例 #6
0
ファイル: SUMChatClient.c プロジェクト: swarajwankhade/dnp
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();
}