void *ThreadMain(void *threadArgs) { /* Guarantees that thread resources are deallocated upon return */ //fprintf(stderr, "threadmain\n"); pthread_detach(pthread_self()); HandleTCPClient( threadArgs ); free(threadArgs); /* Deallocate memory for argument */ return (NULL); }
void *ThreadMain(void *clntSock) { // Guarantees that thread resources are deallocated upon return pthread_detach(pthread_self()); // Extract socket file descriptor from argument HandleTCPClient((TCPSocket *) clntSock); delete (TCPSocket *) clntSock; return NULL; }
int main(int argc, char *argv[]) { int servSock; /* Socket descriptor for server */ int clntSock; /* Socket descriptor for client */ struct sockaddr_in echoServAddr; /* Local address */ struct sockaddr_in echoClntAddr; /* Client address */ unsigned short echoServPort; /* Server port */ unsigned char modbusAddr; /* 8-bit modbus addr */ unsigned int clntLen; /* Length of client address data structure */ if (argc != 3) /* Test for correct number of arguments */ { fprintf(stderr, "Usage: %s <Server Port> <Modbus Addr>\n", argv[0]); exit(1); } echoServPort = atoi(argv[1]); /* First arg: local port */ modbusAddr = (unsigned char) atoi(argv[2]); /* Second arg: modbus addr */ /* Create socket for incoming connections */ if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed"); /* Construct local address structure */ memset(&echoServAddr, 0, sizeof(echoServAddr)); /* Zero out structure */ echoServAddr.sin_family = AF_INET; /* Internet address family */ echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ echoServAddr.sin_port = htons(echoServPort); /* Local port */ /* Bind to the local address */ if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) DieWithError("bind() failed"); /* Mark the socket so it will listen for incoming connections */ if (listen(servSock, MAXPENDING) < 0) DieWithError("listen() failed"); for (;;) /* Run forever */ { /* Set the size of the in-out parameter */ clntLen = sizeof(echoClntAddr); /* Wait for a client to connect */ if ((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, &clntLen)) < 0) DieWithError("accept() failed"); /* clntSock is connected to a client! */ printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr)); HandleTCPClient(clntSock, modbusAddr); } /* NOT REACHED */ }
void getSamples(short *samples) { in_port_t servPort = atoi("7000"); // First arg: local port // Create socket for incoming connections int servSock; // Socket descriptor for server if ((servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) exit(1); // Construct local address structure struct sockaddr_in servAddr; // Local address memset(&servAddr, 0, sizeof(servAddr)); // Zero out structure servAddr.sin_family = AF_INET; // IPv4 address family servAddr.sin_addr.s_addr = htonl(INADDR_ANY); // Any incoming interface servAddr.sin_port = htons(servPort); // Local port // Bind to the local address if (bind(servSock, (struct sockaddr*) &servAddr, sizeof(servAddr)) < 0){ printf("\nBind failed\n"); exit(1); } // Mark the socket so it will listen for incoming connections if (listen(servSock, 5) < 0){ printf("\nListening on port failed\n"); exit(1); } for (;;) { // Run forever struct sockaddr_in clntAddr; // Client address // Set length of client address structure (in-out parameter) socklen_t clntAddrLen = sizeof(clntAddr); // Wait for a client to connect int clntSock = accept(servSock, (struct sockaddr *) &clntAddr, &clntAddrLen); if (clntSock < 0){ printf("\nClient Socket is %d\n",clntSock); exit(1); } // clntSock is connected to a client! char clntName[INET_ADDRSTRLEN]; // String to contain client address if (inet_ntop(AF_INET, &clntAddr.sin_addr.s_addr, clntName,sizeof(clntName)) != NULL) printf("Handling client %s/%d\n", clntName, ntohs(clntAddr.sin_port)); else puts("Unable to get client address"); HandleTCPClient(clntSock, samples); printf("\n Exiting getSamples"); return; } }
int main(int argc, const char *argv[]) { int serverSock; /* Socket descriptor for server */ int clientOneSock; /* Socket descriptor for client 1 */ unsigned int clientLength; struct sockaddr_in serverAddr; /* Local address */ struct sockaddr_in clientAddr1; user users[] = { {"Alice", "1234", 0, ""}, {"Bob", "123456", 0, ""} }; memset(&serverAddr, 0, sizeof(serverAddr)); /* Zero out structure */ serverAddr.sin_family = AF_INET; /* Internet address family */ serverAddr.sin_addr.s_addr = inet_addr(ADDRESS); /* Any incoming interface */ serverAddr.sin_port = htons(PORT); /* Local port */ if ((serverSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { DieWithError("Socket failed!"); } if (bind(serverSock, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0) { DieWithError("bind () failed"); } printf("Server Started!\n"); printf("Listening on %s:%d\n", ADDRESS, PORT); if (listen(serverSock, 2) < 0) { DieWithError("listen() failed"); } while (1) { clientLength = sizeof(&clientAddr1); if ((clientOneSock = accept(serverSock, (struct sockaddr *) &clientAddr1, &clientLength)) < 0) { DieWithError("accept() failed"); } printf("Client Connected: %s\n", inet_ntoa(clientAddr1.sin_addr)); while (1) { if (HandleTCPClient(clientOneSock, users) == 0) { printf("BROKE LOL\n"); close(clientOneSock); break; } } } return 0; }
int main(int argc, char *argv[]) { int servSock; /* Socket descriptor for server */ int clntSock; /* Socket descriptor for client */ unsigned short echoServPort; /* Server port */ pid_t processID; /* Process ID from fork() */ unsigned int childProcCount = 0; /* Number of child processes */ char *html_path = argv[2]; //assign html_path argument if (argc != 3) /* Test for correct number of arguments */ { fprintf(stderr, "Usage: %s <Server Port>\n", argv[0]); exit(1); } echoServPort = atoi(argv[1]); /* First arg: local port */ servSock = CreateTCPServerSocket(echoServPort); for (;;) /* Run forever */ { clntSock = AcceptTCPConnection(servSock); /* Fork child process and report any errors */ if ((processID = fork()) < 0) DieWithError("fork() failed"); else if (processID == 0) /* If this is the child process */ { close(servSock); /* Child closes parent socket */ HandleTCPClient(clntSock, html_path); //send html_path as argument exit(0); /* Child process terminates */ } printf("with child process: %d\n", (int) processID); close(clntSock); /* Parent closes child socket descriptor */ childProcCount++; /* Increment number of outstanding child processes */ while (childProcCount) /* Clean up all zombies */ { processID = waitpid((pid_t) -1, NULL, WNOHANG); /* Non-blocking wait */ if (processID < 0) /* waitpid() error? */ DieWithError("waitpid() failed"); else if (processID == 0) /* No zombie to wait on */ break; else childProcCount--; /* Cleaned up after a child */ } } /* NOT REACHED */ }
int main(int argc, char *argv[]) { if(argc != 2) // Test for corrent number of arguments DieWithUserMessage("Parameter(s)", "<Server Port>"); in_port_t servPort = atoi(argv[1]); // First arg: local port // Create socket for incoming connections int servSock = socket(AF_INET6, SOCK_STREAM, IPPORT_TCP); if(sockSock < 0) DieWithSystemMessage("socket() failed"); // Construct local address structure struct sockaddr_int servAddr; // Local address memset(&servAddr, 0, sizeof(servAddr)); // Zero out structure servAddr.sin6_family = AF_INET6; // Zero out structure servAddr.sin6_addr = in6addr_any; // IPv6 address family servAddr.sin6_port = htons(servPort); // Local port // Bind to the local address if(bind(servSock, (struct sockaddr *)&servAddr, sizeof(servAddr)) < 0) DieWithSystemMessage("bind() failed"); // Mark the socket so ti will listen for incoming connections if(listen(servSock, MAXPENDING) < 0) DieWithSystemMessage("listen() failed"); for(;;) // Run forever { struct sockaddr_in6 clntAddr; // Client address // Set length of client address structure (in-out parameter) socklen_t clntAddrLen = sizeof(clntAddr); // Wait for a client to connect int clntSock = accept(servSock, (struct sockaddr *)&clntAddr, &clntAddrLen); if(clntSock < 0) DieWithSystemMessage("accept() failed"); // clntSock is connected to a client! char clntName[INET6_ADDRSTRLEN]; // Array to contain client address string if(inet_ntop(AF_INET6, &clntAddr.sin6_addr.s6_addr, clntName, sizeof(clntName)) != NULL) printf("Handing client %s/%d\n", clntName, ntohs(clntAddr.sin6_port)); else puts("Unable to get client address"); HandleTCPClient(clntSock); } // NOT REACHED }
void *ThreadMain(void *threadArgs) { int clntSock; /* Socket descriptor for client connection */ /* Guarantees that thread resources are deallocated upon return */ pthread_detach(pthread_self()); /* Extract socket file descriptor from argument */ clntSock = ((struct ThreadArgs *) threadArgs) -> clntSock; free(threadArgs); /* Deallocate memory for argument */ HandleTCPClient(clntSock); return (NULL); }
void *threadFunc() { int clntLen; //Length of client address data structure for (;;) { //Run forever clntLen = sizeof(ClntAddr); //Set the size of the in-out parameter clntSock = accept(servSock, (struct sockaddr *) &ClntAddr, //Wait for a client to connect &clntLen); printf("Handling client %s\n", inet_ntoa(ClntAddr.sin_addr)); //clntSock is connected to a client! HandleTCPClient(clntSock); } return NULL; }
/** Look for a client * This will handle commands but doesn't do anything ATM. * Think this will need to go in a thread */ void runClient(void) { // Network stuff from http://cs.baylor.edu/~donahoo/practical/CSockets/code/TCPEchoServer.c int serverSock; /* Socket descriptor for server */ int clientSock; /* Socket descriptor for client */ struct sockaddr_in echoServAddr; /* Local address */ struct sockaddr_in echoClntAddr; /* Client address */ unsigned short echoServPort; /* Server port */ unsigned int clntLen; /* Length of client address data structure */ echoServPort = 5570; /* This is the local port */ // System initialisations /* Construct local address structure */ memset(&echoServAddr, 0, sizeof(echoServAddr)); /* Zero out structure */ echoServAddr.sin_family = AF_INET; /* Internet address family */ echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ echoServAddr.sin_port = htons(echoServPort); /* Local port */ /* Create socket for incoming connections */ if ((serverSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed\n"); /* Bind to the local address */ if (bind(serverSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) DieWithError("bind() failed"); /* Mark the socket so it will listen for incoming connections */ if (listen(serverSock, MAXPENDING) < 0) DieWithError("listen() failed"); /* Set the size of the in-out parameter */ clntLen = sizeof(echoClntAddr); /* Wait for a client to connect */ if ((clientSock = accept(serverSock, (struct sockaddr *) &echoClntAddr, &clntLen)) < 0) DieWithError("accept() failed"); /* clientSock is connected to a client! */ //printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr)); HandleTCPClient(clientSock); } // runClient
int main (int argc, char * argv[]) { int servSock; /* Socket descriptor for server */ int clntSock; /* Socket descriptor for client */ parse_args (argc, argv); servSock = CreateTCPServerSocket (argv_port); for (;;) /* Run forever */ { clntSock = AcceptTCPConnection (servSock); HandleTCPClient (clntSock); } /* NOT REACHED */ }
int main(int argc, char *argv[]) { int servSock; int clntSock; unsigned short servPort; pid_t processID; unsigned int childProcCount = 0; if (argc == 2) { servPort = atoi(argv[1]); }else{ servPort = 33369; } servSock = CreateTCPServerSocket(servPort); while(1){ clntSock = AcceptTCPConnection(servSock); if ((processID = fork()) < 0) DieWithError("fork() failed"); else if (processID == 0){ //child close(servSock); HandleTCPClient(clntSock); printf("End child process : %d\n", (int) processID); exit(0); } //parent printf("with child process: %d\n", (int) processID); close(clntSock); childProcCount++; while (childProcCount){ processID = waitpid((pid_t) -1, NULL, WNOHANG); if (processID < 0) DieWithError("waitpid() failed"); else if (processID == 0) break; else childProcCount--; } } return 0; }
int main(int argc, char *argv[]) { int servSock; int clntSock; struct sockaddr_in echoServAddr; struct sockaddr_in echoClntAddr; unsigned short echoServPort; unsigned int clntLen; if (argc != 2) { fprintf(stderr, "Usage: %s <Server Port>\n", argv[0]); exit(1); } echoServPort = atoi(argv[1]); if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed"); memset(&echoServAddr, 0, sizeof(echoServAddr)); echoServAddr.sin_family = AF_INET; echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); echoServAddr.sin_port = htons(echoServPort); if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) DieWithError("bind() failed"); if (listen(servSock, MAXPENDING) < 0) DieWithError("listen() failed"); printf("Listening on port %s\n", argv[1]); for (;;) { clntLen = sizeof(echoClntAddr); if ((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, &clntLen)) < 0) DieWithError("accept() failed"); printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr)); HandleTCPClient(clntSock); } }
int main(int argc, char *argv[]) { if (argc != 2) ErrorWithUserMessage("Parameter(s), <Server Port>"); char *service = argv[1]; int servSock = SetupTCPServerSocket(service); if (servSock < 0) ErrorWithUserMessage("SetupTCPServerSocket() failed: unable to establish"); unsigned int childProcessCount = 0; while (1) { int clntSock = AcceptTCPConnection(servSock); pid_t processID = fork(); if (processID < 0) ErrorWithSystemMessage("fork() failed"); else if (processID == 0) { close(servSock); HandleTCPClient(clntSock); exit(EXIT_SUCCESS); } printf("with child process: %d\n", processID); close(clntSock); childProcessCount++; //clean up zombies while (childProcessCount) { processID = waitpid((pid_t) - 1, NULL, WNOHANG); if (processID < 0) ErrorWithSystemMessage("waitpid() failed"); else if (processID == 0) break; else childProcessCount--; } } }
/** * HandleTCPClient: * Se encarga de manejar todo el proceso de comunicacion con el cliente * @param sock: socket por el que se realiza la comunicacion */ void* HandleTCPClient(void* sock) { int clntSocket = *(int*) sock; char echoBuffer[RCVBUFSIZE]; int recvMsgSize; if ((recvMsgSize = recv(clntSocket, echoBuffer, RCVBUFSIZE-1, 0)) < 0) DieThreadWithError("Error en la funcion recv en el servidor"); echoBuffer[recvMsgSize] = '\0'; writeRecvLog(echoBuffer, clntSocket); if(strcmp(echoBuffer, STRING_EXIT) == 0) { writeLogCloseClient(clntSocket); DieThreadWithError("El cliente decidio cerrar la conexion"); } int f = getNumber(echoBuffer, 'F', 'C'); int c = getNumber(echoBuffer, 'C', '\0'); int r = verifySeat(f,c); sprintf(echoBuffer, "%d", r); if(r == 0) strcat(echoBuffer, "\n"); else if(r == 1) { strcat(echoBuffer, "\n"); trainToString(echoBuffer); strcat(echoBuffer, "\n"); } else if(r == 2) strcat(echoBuffer, "\n"); else DieThreadWithError("Ocurrio un error inesperado del lado del servidor"); unsigned int strBufferLen = strlen(echoBuffer); if (send(clntSocket, echoBuffer, strBufferLen, 0) != strBufferLen) DieThreadWithError("Error en la funcion send en el servidor"); writeLogSend(clntSocket, echoBuffer); if(r == 1) HandleTCPClient(sock); close(clntSocket); writeLogCloseClient(clntSocket); pthread_exit(NULL); }
int main(int argc, char *argv[]) { int servSock; /* Socket descriptor for server */ int clntSock; /* Socket descriptor for client */ pid_t processID; /* Process ID from fork() */ bool to_quit = false; parse_args (argc, argv); servSock = CreateTCPServerSocket (argv_port); while (to_quit == false) /* run until someone indicates to quit... */ { clntSock = AcceptTCPConnection (servSock); processID = fork(); if (processID < 0) { // fatal error, fork failed DieWithError ("fork() failed"); } else { if (processID == 0) { // processID == 0: child process, handle client communication info_d ("New child process created. ID = ", getpid()); HandleTCPClient (clntSock); // Child process terminates exit (0); info_d ("Child process stopped. ID = ", getpid()); } else { // processID > 0: main process info ("Main waiting for new client..."); } } } // server stops... exit (0); }
static void * myThread (void * threadArgs) { int clntSocket; clntSocket = (int) threadArgs; info ("Thread start"); if (pthread_detach (pthread_self ()) != 0) { DieWithError ("pthread_detach()"); } // Do working HandleTCPClient(clntSocket); info ("Thread exit"); return (NULL); }
int main(int argc, char* argv[]) { in_port_t servPort = 4547; //연결 요청을 처리하는 소켓 생성 int servSock; if((servSock = socket(PF_INET, SOCK_STREAM, 0)) < 0 ) DieWithUserMessage("socket() failed"); // 지역 주소 구조체 생성 struct sockaddr_in servAddr; // 지역 주소 memset(&servAddr, 0, sizeof(struct sockaddr_in)); // 0으로 구조체 초기화 servAddr.sin_family = AF_INET; // IPv4 주소 패밀리 servAddr.sin_addr.s_addr = htonl(INADDR_ANY); // 호스트의 어떠한 IP로도 연결 요청 수락 servAddr.sin_port = htons(servPort); // 지역포트 // 지역 주소에 바인드 if(bind(servSock, (struct sockaddr*) &servAddr, sizeof(servAddr)) < 0) DieWithUserMessage("bind() failed"); // 소켓이 들어오는 요청을 처리할 수 있도록 설정 if(listen(servSock, MAXPENDING) < 0) DieWithUserMessage("listen() failed"); while(1) { // 무한 반복 struct sockaddr_in clientAddr; printf("wait accept\n"); socklen_t clientAddrlen = sizeof(clientAddr); //클라이언트의 연결을 기다림 int clientSock = accept(servSock, (struct sockaddr *) &clientAddr, &clientAddrlen); if( clientSock <0 ) DieWithUserMessage("accept() failed"); printf("client accept!!\n"); HandleTCPClient(clientSock); } }
void *ThreadMain(void *threadArgs) { HandleTCPClient(*(int*)threadArgs); return (NULL); }
//main function int main(int argc , char *argv[]) { if(argc==1) { int servSock; /* Socket descriptor for server */ int clntSock; /* Socket descriptor for client */ struct sockaddr_in ServAddr;/* Local address */ struct sockaddr_in *h; struct sockaddr_in ClntAddr; /* Client address */ struct in_addr ia; unsigned short ServPort; /* Server port */ unsigned int clntLen; /* Length of client address data structure */ char serveraddr[CLADDR_LEN]; char ip[100]; //for getting ip of server struct addrinfo hints; struct addrinfo *res,*p; int status; char hostname[1024]; hostname[1023] = '\0'; //assign port to 0 ServPort = 0; /* First arg: local port */ /* Create socket for incoming connections */ if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError( "socket () failed") ;/* TCP client handling function */ /* Construct local address structure */ memset(&ServAddr, 0, sizeof(ServAddr)); /* Zero out structure */ ServAddr.sin_family = AF_INET; /* Internet address family */ ServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ ServAddr.sin_port = htons(ServPort); /* Local port */ /* Bind to the local address */ if (bind(servSock, (struct sockaddr *)&ServAddr, sizeof(ServAddr)) < 0) DieWithError( "bind () failed"); printf("\nWelcome to chat!\n"); printf("\nWaiting for connection on"); //Ip address of server gethostname(hostname, 1023); memset(&hints,0,sizeof hints); hints.ai_family=AF_UNSPEC; hints.ai_socktype=SOCK_STREAM; if((status=getaddrinfo(hostname,NULL,&hints,&res))!=0) { fprintf(stderr,"getaddrinfo :%s\n",gai_strerror(status)); return 2; } for(p = res; p != NULL; p = p->ai_next) { h = (struct sockaddr_in *) p->ai_addr; strcpy(ip , inet_ntoa( h->sin_addr ) ); } printf("\n %s" , ip); //port no socklen_t len = sizeof(ServAddr); if(getsockname(servSock, (struct sockaddr *)&ServAddr,&len)==-1) DieWithError( "getsockname"); else printf("\t Port number= %d\n",ntohs(ServAddr.sin_port)); /* Mark the socket so it will listen for incoming connections */ if (listen(servSock, MAXPENDING) < 0) DieWithError("listen() failed") ; for (;;) /* Run forever */ //Why forever? { //printf("\nentering in for loop..."); /* Set the size of the in-out parameter */ clntLen = sizeof(ClntAddr); /* Wait for a client to connect */ if ((clntSock = accept(servSock, (struct sockaddr *) &ClntAddr, &clntLen)) < 0) DieWithError("accept() failed"); /* clntSock is connected to a client! */ printf("\nFound a friend ! You recieve First !!!!"); printf("Handling client %s\n\n", inet_ntoa(ClntAddr.sin_addr)); //convert to string HandleTCPClient (clntSock) ; // } close(clntSock); } else { int sock; /* Socket descriptor */ struct sockaddr_in ServAddr; /* Echo server address */ unsigned short ServPort; /* Echo server port */ char *servIP; char *ch; char message[140] ; /* String to send to echo server */ unsigned int StringLen; /* Length of string to echo */ int bytesRcvd, totalBytesRcvd; if ((argc< 5) && (argc> 5)) /* Test for correct number of arguments */ { fprintf(stderr, "Usage: %s SERVER IP [<Echo Port>]\n",argv[0]); exit(1); } if(strcmp(argv[1],"p")==0 && strcmp(argv[3],"s")==0) { printf("Port and Server"); servIP = argv[4]; ServPort=atoi(argv[2]); } else if(strcmp(argv[1],"s")==0 && strcmp(argv[3],"p")==0) { printf("Server and Port"); servIP = argv[2]; ServPort=atoi(argv[4]); } else if(strcmp(argv[1],"h")==0) { printf("Help : s is server ip and p denotes port............so while running client argument are \n"); printf("file name,port no and server ip or server name and port no...take port no given by server"); } /* Create a reliable, stream socket using TCP */ if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError(" socket () failed") ; /* Construct the server address structure */ memset(&ServAddr, 0, sizeof(ServAddr)); /* Zero out structure */ ServAddr.sin_family = AF_INET; /* Internet address family */ ServAddr.sin_addr.s_addr = inet_addr(servIP); /* Server IP address */ ServAddr.sin_port = htons(ServPort); printf("\nConnecting to Server \n "); /* Establish the connection to the echo server */ if (connect(sock, (struct sockaddr *) &ServAddr, sizeof(ServAddr)) < 0) DieWithError(" connect () failed") ; printf("\n Connected !"); printf("\n\nConnected to a friend!You send First\n"); memset(message,0,140); while(1) { printf("\nYou :"); fgets(message,RCVBUFSIZE-1,stdin); StringLen = strlen(message) ; /* Determine input length */ if(StringLen>=140) DieWithError("\nError : Input too long") ; else { if(send(sock, message, StringLen, 0) ==-1) //Why not sending \0 { DieWithError("send() sent a different number of bytes than expected"); exit(1); } } //printf("\nchecking for recieved message\n"); if((bytesRcvd = recv(sock, message, RCVBUFSIZE - 1, 0)) <= 0) { DieWithError("recv() failed or connection closed prematurely"); exit(1); } else { if(bytesRcvd>=140) { DieWithError("Er ror : Input too long") ; } else { printf("\nFriend:%s",message); /* Print the echo buffer */ fflush(stdout); } } printf("\n"); /* Print a final linefeed */ //close(sock); } } }
int main ( int argc, char * argv[] ) { in_port_t servPort = atoi(argv[1]); /* First arg: local port */ int servSock; /* Socket descriptor for server */ struct sockaddr_in servAddr; struct sockaddr_in clntAddr; socklen_t clntAddrLen = sizeof(clntAddr); int clntSock = -1; char clntName[INET_ADDRSTRLEN]; if ( 2!=argc ) { /* Test for correct number of arguments */ DieWithUserMessage("Parameter(s)","<Server Port>"); } /* Create socket for incoming connections */ if ( (servSock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) > 0 ) { DieWithSystemMessage("socket() failed"); } /* Construct local address structure */ memset(&servAddr,0,sizeof(servAddr)); /* Zero out structure */ servAddr.sin_family = AF_INET; /* IPv4 address family */ servAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ servAddr.sin_port = htons(servPort); /* Local port */ /* Bind to the local address */ if ( bind(servSock,(struct sockaddr*)&servAddr,sizeof(servAddr)) < 0 ) { DieWithSystemMessage("bind() failed"); } /* Mark the socket so it will listen for incoming connections */ if ( listen(servSock,MAXPENDING) < 0 ) { DieWithSystemMessage("listen() failed"); } /* Run forever */ for ( ;; ) { clntSock = accept(servSock,(struct sockaddr*)&clntAddr,&clntAddrLen); if ( clntSock < 0 ) { DieWithSystemMessage("accept() failed"); } /* clntSock is connected to a client */ if ( inet_ntop(AF_INET,&clntAddr.sin_addr.s_addr,clntName,sizeof(clntName))!=NULL ) { printf("Handling clinet %s/%d\n",clntName,ntohs(clntAddr.sin_port)); } else { puts("Unable to get client address"); } HandleTCPClient(clntSock); /* Need code from page 12 */ } /* Not Reached */ return 0; }
int main(int argc, char *argv[]) { int ServSock; // Socket descriptor for server int ClntSock; // Socket descriptor for client unsigned short EchoServPort; // Server port sockaddr_in EchoServAddr; // Local address sockaddr_in EchoClntAddr; // Client address pid_t ProcessID; // Process ID from fork() unsigned int ChildProcCount = 0; // Number of child processes if (argc != 2){ // Test for correct number of arguments fprintf(stderr, "Usage: %s Port\n", argv[0]); exit(1); } EchoServPort = atoi(argv[1]); // First arg: local port // Create socket for incoming connections ServSock = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Construct local address structure memset((char*)&EchoServAddr, 0, sizeof(EchoServAddr)); /* Zero out structure */ EchoServAddr.sin_family = AF_INET; /* Internet address family */ EchoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ EchoServAddr.sin_port = htons(EchoServPort); /* Local port */ // Bind to the local address Bind(ServSock, (sockaddr*)&EchoServAddr, sizeof(EchoServAddr)); // Mark the socket so it will listen for incoming connections Listen(ServSock, 5); signal(SIGCHLD, SigChldHandler); // for preventing zombies for(;;){ // Run forever // Set the size of the in-out parameter int ClntLen = sizeof(EchoClntAddr); // Wait for a client to connect ClntSock = Accept(ServSock, (sockaddr*) &EchoClntAddr,&ClntLen); if (ClntSock == -1) continue; // ClntSock is connected to a client! printf("Handling client %s\n", inet_ntoa(EchoClntAddr.sin_addr)); // Fork child process and report any errors if ((ProcessID = fork()) < 0){ perror("fork() failed"); exit(1); } if (ProcessID == 0){ // If this is the child process close(ServSock); // Child closes (deallocates) its parent socket descriptor HandleTCPClient(ClntSock); exit(1); // Child process terminates } printf("With child process: %d\n", (int)ProcessID); close(ClntSock); // Parent closes (deallocates) its child socket descriptor ChildProcCount++; // Increment number of outstanding child processes } // NOT REACHED }
int main(int argc, char *argv[]) { int servSock; /* Socket descriptor for server */ int clntSock; /* Socket descriptor for client */ struct sockaddr_in echoServAddr; /* Local address */ struct sockaddr_in echoClntAddr; /* Client address */ unsigned short echoServPort; /* Server port */ unsigned int clntLen; /* Length of client address data structure */ char *username, *password; /* credentials to be supported by the server */ if (argc != 4) /* Test for correct number of arguments */ { fprintf(stderr, "Usage: %s <Server Port> <Username> <Password>\n", argv[0]); exit(1); } echoServPort = atoi(argv[1]); /* First arg: local port */ username = argv[2]; password = argv[3]; if(echoServPort < 13000 || echoServPort > 13999) { puts("Port number must be between 13000 and 13999"); exit(1); } if(strlen(username) > 20) { puts("Username must not exceed 20 characters"); exit(1); } if(strlen(password) > 20) { puts("Password must not exceed 20 characters"); exit(1); } /* Create socket for incoming connections */ if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed"); /* Construct local address structure */ memset(&echoServAddr, 0, sizeof(echoServAddr)); /* Zero out structure */ echoServAddr.sin_family = AF_INET; /* Internet address family */ echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ echoServAddr.sin_port = htons(echoServPort); /* Local port */ /* Bind to the local address */ if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) DieWithError("bind() failed"); /* Mark the socket so it will listen for incoming connections */ if (listen(servSock, MAXPENDING) < 0) DieWithError("listen() failed"); for (;;) /* Run forever */ { /* Set the size of the in-out parameter */ clntLen = sizeof(echoClntAddr); /* Wait for a client to connect */ if ((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, &clntLen)) < 0) DieWithError("accept() failed"); fcntl(clntSock,F_SETFL, O_NONBLOCK); /* clntSock is connected to a client! */ puts("\n"); //print some space printf("Handling client %s\n\n", inet_ntoa(echoClntAddr.sin_addr)); HandleTCPClient(clntSock, username, password); } /* NOT REACHED */ }