Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > [C++, Delphi] Управление удалённым приложением UDP


Автор: zall 20.3.2012, 18:40
Здравствуйте, собственно такая проблема уже имеется клиент и сервер обменивающийся сообщениями через udp под Linux. Главный вопрос как можно сделать чтоб сообщение которое отсылается клиентом было как бы командой, и открывало приложение если написан полный путь к нему и убивало это приложение (наверное через pid процесса). Можно на самом деле на любом языке, если кто сталкивался раньше. Или может посоветуете как вообще это делать если нет так как я начал.

Собственно клиент.

Код

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

char msg1[] = "Hello there!\n";
char msg2[] = "Bye bye!\n";

int main()
{
    int sock;
    struct sockaddr_in addr;

    sock = socket(AF_INET, SOCK_DGRAM, 0);
    if(sock < 0)
    {
        perror("socket");
        exit(1);
    }

    addr.sin_family = AF_INET;
    addr.sin_port = htons(3425);
    addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
    sendto(sock, msg1, sizeof(msg1), 0,
           (struct sockaddr *)&addr, sizeof(addr));

    connect(sock, (struct sockaddr *)&addr, sizeof(addr));
    send(sock, msg2, sizeof(msg2), 0);

    close(sock);

    return 0;
}


сервер

Код

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>

int main()
{
    int sock;
    struct sockaddr_in addr;
    char buf[1024];
    int bytes_read;

    sock = socket(AF_INET, SOCK_DGRAM, 0);
    if(sock < 0)
    {
        perror("socket");
        exit(1);
    }
    
    addr.sin_family = AF_INET;
    addr.sin_port = htons(3425);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    if(bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("bind");
        exit(2);
    }

    while(1)
    {
        bytes_read = recvfrom(sock, buf, 1024, 0, NULL, NULL);
        buf[bytes_read] = '\0';
        printf(buf);
    }
    
    return 0;
}

Автор: rsm 21.3.2012, 03:03
В серверной части добавить в хидеры stdlib.h, в строке 33 заменить printf(buf) на system(buf) - профит! smile
Это, разумеется, самый примитивный вариант, но работать будет smile

Автор: zall 21.3.2012, 20:07
спасибо) а перегружать её не надо? Просто и сам путём чтения форумов наткнулся на это.

Автор: xvr 22.3.2012, 13:54
Цитата(zall @  21.3.2012,  20:07 Найти цитируемый пост)
 а перегружать её не надо?

'её' - это кого?

Автор: zall 22.3.2012, 17:32
system. типо вот так

 
Код

int system(std::string cmd) {
     return system(cmd.c_str());
}

Автор: xvr 22.3.2012, 18:01
Цитата(zall @  22.3.2012,  17:32 Найти цитируемый пост)
system. типо вот так

Можете перегрузить, если хотите. Но зачем?

Автор: zall 22.3.2012, 20:19
Всем спасибо, уже всё понял.

Автор: bems 26.3.2012, 13:48
а при чем тут Delphi?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)