Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <stdlib.h>
- #include <string.h>
- #include <assert.h>
- #define PID_CHILD 0
- #define SERVER_PORT 8080
- #define CLIENT_PORT 8000
- const char password[] = "aabbcc";
- /**
- * Функция, в которой будут ожидаться сообщения от клиента
- * @param clientfd - сокет клиента
- */
- void listenClient(int clientfd) {
- printf("Клиент подключился\n");
- char buf[256];
- while (true) {
- int length = recv(clientfd, buf, sizeof(buf), 0);
- if (length <= 0) {
- printf("Клиент отключился\n");
- return;
- }
- buf[length] = '\0';
- if (strncmp(buf, password, strlen(password)) != 0) {
- // Пароль не правильный
- printf("Пароль не верный: %s\n", buf);
- sprintf(buf, "Пароль не верный");
- send(clientfd, buf, strlen(buf), 0);
- }else {
- printf("Пароль верный: %s\n", buf);
- sprintf(buf, "Пароль верный");
- send(clientfd, buf, strlen(buf), 0);
- }
- }
- }
- int main() {
- // Создаем сокет
- int sockfd = socket(AF_INET, SOCK_STREAM, 0);
- assert(sockfd != -1 && "Error: can't create socket");
- printf("Socket created\n");
- // Создаем локальный адрес
- struct sockaddr_in local_addr = {
- .sin_family = AF_INET,
- .sin_port = htons(SERVER_PORT),
- .sin_addr = { .s_addr = INADDR_ANY }
- };
- // Биндим сокет
- int result = bind(sockfd, (struct sockaddr *) &local_addr, sizeof(local_addr));
- assert(result != -1 && "Error: can't bind socket");
- printf("Socket binded\n");
- while (true) {
- // Ожидаем подключение нового клиента
- result = listen(sockfd, 5);
- assert(result != -1 && "Error: can't listen socket");
- struct sockaddr_in client_addr = { 0 };
- socklen_t addr_len = sizeof(client_addr);
- int clientfd = accept(sockfd, (sockaddr *) &client_addr, &addr_len);
- assert(result != -1 && "Error: can't accept connection");
- int pid = fork();
- assert(pid != -1 && "Error: can't create child process");
- if (pid == PID_CHILD) {
- listenClient(clientfd);
- return 0;
- }
- }
- }
- #include <stdio.h>
- #include <string.h>
- #include <assert.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h> /** inet_addr() */
- #define SERVER_PORT 8080
- #define CLIENT_PORT 8000
- int main() {
- // Создаем сокет IPPROTO_IP
- int sockfd = socket(AF_INET, SOCK_STREAM, 0);
- assert(sockfd != -1 && "Error: can't create socket");
- printf("Socket created\n");
- // Создаем локальный адрес
- struct sockaddr_in local_addr = {
- .sin_family = AF_INET,
- .sin_port = htons(CLIENT_PORT),
- .sin_addr = { .s_addr = INADDR_ANY }
- };
- // Биндим сокет
- int result = bind(sockfd, (struct sockaddr *) &local_addr ,sizeof(struct sockaddr_in));
- assert(result != -1 && "Error: can't bind socket");
- printf("Socket binded\n");
- // Создаем адрес сервера
- struct sockaddr_in remote_addr = {
- .sin_family = AF_INET,
- .sin_port = htons(SERVER_PORT),
- .sin_addr = { .s_addr = inet_addr("127.0.0.1") },
- };
- result = connect(sockfd, (sockaddr*) &remote_addr, sizeof(remote_addr));
- assert(result != -1 && "Error: can't connect to server");
- printf("Connected to server\n");
- char buf[256];
- while (true) {
- // Запрашиваем пароль
- printf("Введите пароль: ");
- fflush(stdout);
- scanf("%s", buf);
- // Отправляем пароль на сервер
- send(sockfd, buf, strlen(buf), 0);
- // Получаем ответ
- int length = recv(sockfd, buf, sizeof(buf), 0);
- assert(length != -1 && "Error: can't receive message");
- buf[length] = '\0';
- printf("[SERVER] %s\n", buf);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement