Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/47: Рейтинг темы: голосов - 47, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 09.11.2018
Сообщений: 5

Клиент-сервер TCP для Linux с fork

04.12.2018, 11:19. Показов 9875. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите написать клиент серверную программу TCP для Linux с fork. Демонстрация должна быть такая: к серверу подключается несколько клиентов и каждый клиент должен передавать сообщения 1(1 клиент передает 1 с задержкой в 1 секунду), 2(2 клиент передает 2 с задержкой в 2 секунды), 3(3 клиент передает 3 с задержкой в 3 секунды) например: сервер получает 11211311231 и тд)
суть задания :
1. Написать программу (на языке C/C++, консольное приложение) обеспечивающую параллельную работу севера, принимающего файлы от клиента по сети. Условие: мультипроцессная организация на основе функции fork, транспортный протокол – TCP.
2. Обеспечить в сервере завершение «зомби-процессов».
3. Написать клиентскую программу, передающую файл по сети серверу.
4. Продемонстрировать реализованные возможности программ согласно заданию. Серверная программа должна находить номер свободного порта и выводить его на экран (см., например, [1], стр. 338-342: функции bind, getsockname). При запуске клиентской программы задавать со строки IP адрес сервера и порт.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.12.2018, 11:19
Ответы с готовыми решениями:

TCP-сервер и TCP-клиент. Клиент не находит файл.
Всем привет! Решил изучать передачу данных по сети и начал с освоения примера, приведённого в книге "Visual C# 2008. Базовый курс...

Если сервер TCP то и клиент тоже должен быть TCP?
Я полный новичок И я так понимаю есть TCP client (Sockets), TCP server (Sockets), и ClientSocket (ScktComp), ServerSocket (ScktComp) ...

как создать TCP клиент, TCP сервер ? На С++
Очень нужна помощь!Как написать TCP клиент, TCP сервер. Например,клиент вводит строку с клавиатуры и отсылает ее серверу.только перед...

2
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
04.12.2018, 11:23
Задание понятно. Что уже сделано и что конкретно не получается?
0
0 / 0 / 0
Регистрация: 09.11.2018
Сообщений: 5
07.12.2018, 06:55  [ТС]
уже сделан клиент и сервер tcp, добавлена функция fork, осталось довести до ума демонстрацию , что бы каждый клиент непрерывно цикличиски отправлял одно и то же сообщение с разной задержкой(что бы была видна параллельная работа сервера с несколькими клиентами)
вот клиент
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <errno.h>
 
char msg1[] = "Hello there!\n";
char msg2[] = "Bye bye!\n";
char msg3[] = "Its me again!\n";
 
int main(int argc, char *argv[])
{
    int sock;
    struct sockaddr_in addr;
    void sigalarm(int);
    char buf[1024]; 
    if(argc!=3) {
        printf("Вы забыли указать адрес и порт.\n");
        exit(1);
    }
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
    {
        perror("socket");
        exit(1);
    }
    addr.sin_family = AF_INET;
    addr.sin_port = htons(atoi(argv[2]));
    addr.sin_addr.s_addr = inet_addr(argv[1]);
    if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("connect");
        exit(2);
    }
        printf("Send to server massege\n");
        send(sock, msg1, sizeof(msg1), 0);
        recv(sock, buf, 1024, 0);
        printf("Reciving massege:%s\n",buf);
    close(sock);
    return 0;
}
Вот сервер:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
 
void reaper(int sig){
    int status;
    while(wait3(&status,WNOHANG,(struct rusage*)0)>=0);
}
 
int main()
{
    int sock, listener;
    struct sockaddr_in addr;
    char buf[1024];
    int bytes_read,len = sizeof(struct sockaddr);
    listener = socket(AF_INET, SOCK_STREAM, 0);
    if(listener < 0)
    {
        perror("socket");
        exit(1);
    }
    addr.sin_family = AF_INET;
    addr.sin_port = htons(0);
    addr.sin_addr.s_addr = INADDR_ANY;
    if(bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("bind");
        exit(2);
    }
    listen(listener, 3);
    getsockname(listener, (struct sockaddr *)&addr, &len);
    printf("port = %d\n",ntohs(addr.sin_port));
    signal(SIGCHLD,reaper);
    while(1)
    {
        sock = accept(listener,0, 0);
        if(sock < 0)
        {
            perror("accept");
            exit(3);
        }   
        switch(fork())
        {
        case -1:
            perror("fork");
            break;    
        case 0:
            close(listener);
            while(1)
            {
                bytes_read = recv(sock, buf, 1024, 0);
                if(bytes_read <= 0) break;
                buf[bytes_read] = '\0';
                printf("Reciving massege:%s\n",buf);
                printf("Send to client massege\n");
                send(sock, buf, bytes_read, 0);
            }
 
            close(sock);
            exit(0);
            
        default:
            close(sock);
        }
    } 
    close(listener);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2018, 06:55
Помогаю со студенческими работами здесь

TCP клиент-сервер - Требуемый адрес для своего контекста не верен
Реализован клиент и сервер. Сервер - консольное приложение. Клиент - приложение WinForms СЕРВЕР public Socket...

Связь TCP сервер - сервер-клиент на node.js - браузер. нужна коррекция
Суть проблемы: написал по примерам программу, с помощью которой можно с браузера отправить команду на TCP сервер и получить ответ. Все...

Нужен ли хостинг или что то еще, для работы программ клиент-сервер(TCP/IP) на разных компьютерах?
Нужен ли хостинг или что то еще, для работы программ клиент-сервер(TCP/IP) на разных компьютерах?

Tcp ip клиент-сервер C++ сервер выводит мусор
server # include &lt;sys/types.h&gt; # include &lt;iostream&gt; # include &lt;winsock2.h&gt; # include &lt;stdlib.h&gt; # pragma comment (lib,...

TCP/IP клиент и сервер
Сервер # include &lt;sys/types.h&gt; # include &lt;iostream&gt; # include &lt;winsock2.h&gt; # include &lt;stdlib.h&gt; # pragma comment (lib,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru