#include #include #include #include #include #include #include #include #define PORT 9000 int main(int argc,char *argv[]){ int sockfd, ret; struct sockaddr_in serverAddr; int newSocket; struct sockaddr_in newAddr; socklen_t addr_size; char buffer[1024]; char message[1024]; pid_t childpid; sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd < 0){ printf("[-]Error in connection.\n"); exit(1); } printf("[+]Server Socket is created.\n"); memset(&serverAddr, '\0', sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(PORT); serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); ret = bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)); if(ret < 0){ printf("[-]Error in binding.\n"); exit(1); } printf("[+]Bind to port is OK\n"); if(listen(sockfd, 10) == 0){ printf("[+]Listening....\n"); } else{ printf("[-]Error in binding.\n"); } while(1){ newSocket = accept(sockfd, (struct sockaddr*)&newAddr, &addr_size); if(newSocket < 0){ exit(1); } printf("Connection accepted from %s:%d\n", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port)); if((childpid = fork()) == 0){ close(sockfd); while(1){ recv(newSocket, buffer, 1024, 0); if(strcmp(buffer, ":exit") == 0){ printf("Disconnected from %s:%d\n", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port)); break; } else{ printf("Message from the client: %s\n",buffer); printf("Enter your message: "); scanf("%s", &message[0]); send(newSocket, message, strlen(message), 0); bzero(buffer, sizeof(buffer)); bzero(message, sizeof(message)); } } } } close(newSocket); exit(0); }