прослушивать порт и отвечать если пришел заданный текст

Модератор: Fastman

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-12 8:47:10

сильно сложное оное сделать?

а то сделал прогруммку для винды, но она парсила xml страничку апача... но апач не выдержал почти 2000 коннектов в одно и тоже время... и слег
(не считая гаджета, который даже хз, стоколько пользователей установило)

можно ли демона написать который слушал бы порт(указанный в конфиг файле, если возможно)

и отвечал, если с какого то ip пришел текст(запрос)....


на винде оказалось не сложно клиента написать...а вот как на bsd дело обстоит?

*не сложно... на протяжении месяца :)
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение Alex Keda » 2011-02-12 11:16:41

нгинкс, наверное выдержал бы...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-12 12:16:31

а демоном сложно будет?
раз уж быть широкопрофильным "специалистом" не могу... но дилетантом возможно:)
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Гость
проходил мимо

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение Гость » 2011-02-12 13:37:00

за час пишется такая смешная программка
только я не понял в чем вопрос, это вроде раздел С++ а не работа

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-12 23:03:14

ну в разделе языков программирования и пишу, потому сам буду писать, по крайней мере постараюсь...

а в разделе с++, вроде gcc это компилятор c++

или нет?
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Гость
проходил мимо

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение Гость » 2011-02-12 23:08:54

ну в разделе языков программирования и пишу, потому сам буду писать,
вообще раздел программирование это не блог
когда будете писать, и столкнетесь с трудностями или ошибками, их и пишите

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-13 2:27:20

на просторах инета нашел:
просто сервер который принимает символ инкрементирует его и возвращает (для пробы пера был сделан и рповерен телнетом) работает:

Код: Выделить всё

radist04ka@ cat tempdaemon.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
        int err=-1;
        int server_sockfd, client_sockfd;
        int server_len, client_len;
        struct sockaddr_in server_address;
        struct sockaddr_in client_address;

        server_sockfd = socket(AF_INET, SOCK_STREAM, 0);

        server_address.sin_family = AF_INET;
        server_address.sin_addr.s_addr = htonl(INADDR_ANY);
        server_address.sin_port = htons(9734);
        server_len = sizeof(server_address);
        err=(bind(server_sockfd, (struct sockaddr *) &server_address, server_len));

        if(err!=0) printf("bind error!\n");
        else printf("bind is ok\n");
        err=-1;

        err=(listen(server_sockfd, 5));
        if(err!=0) printf("listen error!\n");
        else printf("listen is ok\n");
        while(1)
        {
                char ch;

                printf("server waiting\n");

                client_len = sizeof(client_address);
                client_sockfd = accept(server_sockfd, (struct sockaddr *) &client_address, &client_len);

                read(client_sockfd, &ch, 1);
                ch++;
                write(client_sockfd, &ch, 1);
                close(client_sockfd);
        }
}

radist04ka@
собралось без проблем:

Код: Выделить всё

radist04ka@ gcc -o TempRadik tempdaemon.c
radist04ka@ ls -l
total 12
drwxrwxr-x  2 radist  www   512 13 фев 01:44 ./
drwxr-xr-x  9 radist  www  1536 13 фев 01:20 ../
-rwxrwxr-x  1 radist  www  6122 13 фев 01:33 TempRadik*
-rw-rw-r--  1 radist  www  1358 13 фев 01:21 tempdaemon.c
запускается тоже нормально, но не в фоне....

Код: Выделить всё

radist04ka@ ./TempRadik
bind is ok
listen is ok
также порт повидимому слушается:

Код: Выделить всё

radist04ka@ sockstat | grep Temp
radist   TempRadik  97222 3  tcp4   *:9734                *:*
конекчусь:

Код: Выделить всё

radist04ka@ telnet 127.0.0.1 9734
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
f
gConnection closed by foreign host.
radist04ka@ telnet 127.0.0.1 9734
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
e
fConnection closed by foreign host.
radist04ka@ telnet 127.0.0.1 9734
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
j
kConnection closed by foreign host.
тут же в консоли выдает при вводе любой буквы в телнет:

Код: Выделить всё

radist04ka@ ./TempRadik
bind is ok
listen is ok
server waiting
server waiting
server waiting
server waiting
server waiting
server waiting
^C
честно так и не разобрался как сие работает,
что такое "инкриминирует"?
подразумаю замену символа:
потому что:

Код: Выделить всё

Escape character is '^]'.
f
g
Escape character is '^]'.
e
f
Escape character is '^]'.
j
k
а почему закрывает тогда соединение?
или так и должно?

но раз написано что работает, значит работает..

несколько вопросов:

как вывести номер порта в конфиг файл
как демоном запускать программу?
точнее как запускать демоном знаю, куда записать daemon(0,0); чтобы программа запускалась в фоне...

Гость
проходил мимо

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение Гость » 2011-02-13 2:39:33

не понимаю как вы будете что то писать
а темболее говорите что написали под виндовс
если вообще даже в основах С/C++ не разбираетесь
что такое "инкриминирует"?
принявшийся символ увеличивается на единицу и отдается обратно
а почему закрывает тогда соединение?
ну так код смотрите
после отправки стоит close()
как вывести номер порта в конфиг файл
записать в конфиг?
чесно говоря не понимаю вопроса
это елементарно для программиста
как демоном запускать программу?
man daemon
?
точнее как запускать демоном знаю, куда записать daemon(0,0); чтобы программа запускалась в фоне...
там же в мане и пример должен быть

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение FreeBSP » 2011-02-13 2:47:32

в данном случае
символ - есть байт, а байт суть тип данных объемом один октет, один из битов которого выделен под знак, а остальные - под хранение целого значения
если ты не понял - перечитай выше написанное, считая количество прочтений следующим образом

Код: Выделить всё

int main() {
  char a = 0;
  while (a < 128) {
    // прочитай написанное выше
    ++a;
  }
  return 0;
}
если программа завершается с кодом ошибки отличным от нуля - значит ты не постиг дзен символов. начни сначала

P.S. ночью хочется постебаться xD
P.P.S. char хранит один переменную, которая может интерпретироваться как код символа, а может - как числовое значение в пределах от -128 до 127. посему к нему можно применять все операци целочисленной арифметики, в частности инкремент. :bn:
P.P.P.S. для начала пойми, что есть суть "даемон" и только потом юзай высокоуровневую шелуху.
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-13 2:57:08

не успел написать как уже ответили..


нашел еще это:

Код: Выделить всё

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
 
 
// 2. Open socket for this SERVER
 
unlink("server_socket");
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
 
// 3. Socket name for SERVER
 
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(9734);
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
 
// 4. Connecting socket for SERVER
 
listen (server_sockfd, 5);
while(1) {
char *ch;
 
printf("server waiting\n");
 
// 5. I/O socket "SOCKFD"
 
client_len = sizeof (client_address);
client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
 
read(client_sockfd, &ch, 1);
printf("%c , %d\n",ch,ch);
 
write(client_sockfd, &ch, 1);
close(client_sockfd);
 
 
}
}
работает так же:

Код: Выделить всё

radist04ka@ telnet 127.0.0.1 9734
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
pass
pConnection closed by foreign host.
radist04ka@ telnet 127.0.0.1 9734
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
bla bla bla
bConnection closed by foreign host.
radist04ka@
возвращает:

Код: Выделить всё

radist04ka@ ./TempR
server waiting
p , -1077941136
server waiting
b , -1077941150
server waiting
t , -1077941132
server waiting
^C
radist04ka@
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-13 3:12:16

а темболее говорите что написали под виндовс
парсинг xml по сравнению с этим....

Код: Выделить всё

не понимаю как вы будете что то писать
если вообще даже в основах С/C++ не разбираетесь
а мы такие:) ничего не умеем зато много можем... методом тыка проб и ошибок...
записать в конфиг?
чесно говоря не понимаю вопроса
это елементарно для программиста
совершенно с вами согласен :)) с одной поправкой, я ни в коем случае не программист...
там же в мане и пример должен быть
покапаем, будем пробовать...
в данном случае
символ - есть байт, а байт суть тип данных объемом один октет, один из битов которого выделен под знак, а остальные - под хранение целого значения
если ты не понял - перечитай выше написанное, считая количество прочтений следующим образом
можно поподробнее и более понятным языком...
P.P.S. char хранит один переменную, которая может интерпретироваться как код символа, а может - как числовое значение в пределах от -128 до 127. посему к нему можно применять все операци целочисленной арифметики, в частности инкремент.
ниче не понял :(
P.S. ночью хочется постебаться
угу, а мне над самим собой уж как хочется...
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение FreeBSP » 2011-02-13 12:21:52

ты не постиг дзен символов xD

char это переменная длиной 8 битов. и ты можешь эти 8 битов использовать как твоей душе угодно. сумеешь в них запихнуть черта лысого - пожалуйста!
но по умолчанию - там хранится код символа - числовое значение - в пределах от -128 до 127
из кода

Код: Выделить всё

[12:13]~/# cat test.c
int main() {
        char a[10]={ 0, 1, 2, 126, 127,-128, -127, -126, -2, -1};
        return 0;
}
получается следующий ассемблерный код(размещение элементов массива в памяти):

Код: Выделить всё

mov     byte ptr [ebp-0Eh], 0
mov     byte ptr [ebp-0Dh], 1
mov     byte ptr [ebp-0Ch], 2
mov     byte ptr [ebp-0Bh], 7Eh
mov     byte ptr [ebp-0Ah], 7Fh
mov     byte ptr [ebp-9],   80h
mov     byte ptr [ebp-8],   81h
mov     byte ptr [ebp-7],   82h
mov     byte ptr [ebp-6],  0FEh
mov     byte ptr [ebp-5],  0FFh
последний столбец - есть как раз элементы массива. четко видно что за чем следует
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-13 16:11:47

вот:
сделан из двух исходников + один человек помог доделать

Код: Выделить всё

radist04ka@ cat tempd.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
 
int main()
{
        int err=-1;
        int server_sockfd, client_sockfd;
        int server_len, client_len;
        int MAX_LINE_LEN;
 
        struct sockaddr_in server_address;
        struct sockaddr_in client_address;
 
        server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
 
        server_address.sin_family = AF_INET;
        server_address.sin_addr.s_addr = htonl(INADDR_ANY);
        server_address.sin_port = htons(9734);
        server_len = sizeof(server_address);
        err=(bind(server_sockfd, (struct sockaddr *) &server_address, server_len));
 
        if(err!=0) printf("bind error!\n");
        else printf("bind is ok\n");
        err=-1;
 
        err=(listen(server_sockfd, 5));
        if(err!=0) printf("listen error!\n");
        else printf("listen is ok\n");
        while(1)
        {
                char *path = filetest;
                char buf[MAX_LINE_LEN];
                FILE *file;
                int nread;
 
                client_len = sizeof(client_address);
                client_sockfd = accept(server_sockfd, (struct sockaddr *) &client_address, &client_len);
 
                nread = read(client_sockfd, &buf, sizeof(buf) - 1);
                if (nread < 1) {
                        printf("read: %s. closing connection\n", strerror(errno));
                        close(client_sockfd);
                        continue;
                }
                buf[nread] = 0;
                printf("server got: \"%s\"\n", buf);
 
                if (strncmp(buf, "TEST", 4) == 0) {
                        strncpy(buf, "OK\n", sizeof(buf) -1);
                        buf[sizeof(buf) - 1] = 0;
                } else if(strncmp(buf, "GETTEST", 7) == 0) {
                        file = fopen(path, "r");
                        if (file == NULL ||
                            fgets(buf, sizeof(buf), file) == NULL) {
                                strncpy(buf, "ERR\n", sizeof(buf) -1);
                                buf[sizeof(buf) - 1] = 0;
                        }
                        if (file)
                                fclose(file);
                } else {
                        printf("bad command from client, closing connection\n");
                        close(client_sockfd);
                        continue;
                }
 
                printf("server answer: \"%s\"\n", buf);
                write(client_sockfd, &buf, strlen(buf));
                close(client_sockfd);
        }
 
}
в консоли:

Код: Выделить всё

radist04ka@ sockstat | grep Temp
radist   TempPrg    25008 3  tcp4   *:9734                *:*
radist04ka@ telnet 192.168.50.241 9734
Trying 192.168.50.241...
Connected to 192.168.50.241.
Escape character is '^]'.
test
Connection closed by foreign host.
radist04ka@ telnet 192.168.50.241 9734
TTrying 192.168.50.241...
Connected to 192.168.50.241.
Escape character is '^]'.
TEST
Connection closed by foreign host.
radist04ka@ telnet 192.168.50.241 9734
Trying 192.168.50.241...
Connected to 192.168.50.241.
Escape character is '^]'.
TEST
OK
Connection closed by foreign host.
radist04ka@ telnet 192.168.50.241 9734
Trying 192.168.50.241...
Connected to 192.168.50.241.
Escape character is '^]'.
TEST
OK
Connection closed by foreign host.
radist04ka@ telnet 192.168.50.241 9734
Trying 192.168.50.241...
Connected to 192.168.50.241.
Escape character is '^]'.
GETTEST
:99.9:99.9:99.9:999:999:88.88:Connection closed by foreign host.
radist04ka@ telnet 192.168.50.241 9734
Trying 192.168.50.241...
Connected to 192.168.50.241.
Escape character is '^]'.
GETTEST
:99.9:99.9:99.9:999:999:88.88:Connection closed by foreign host.
radist04ka@
в программе:

Код: Выделить всё

radist04ka@ ./TempPrg
bind is ok
listen is ok
server got: "test
"
bad command from client, closing connection
server got: "TTEST
"
bad command from client, closing connection
server got: "TEST
"
server answer: "OK
"
server got: "TEST
"
server answer: "OK
"
server got: "GETTEST
"
server answer: ":99.9:99.9:99.9:999:999:88.88:"
server got: "GETTEST
"
server answer: ":99.9:99.9:99.9:999:999:88.88:"
^C
radist04ka@
теперь, как вывести порт, название файла откуда строчку брать в конфиг-файл...
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-13 16:46:00

сделал так:

Код: Выделить всё

radist04ka@ cat tempd.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main()
{
        int err=-1;
        int server_sockfd, client_sockfd;
        int server_len, client_len;
        int MAX_LINE_LEN;

        struct sockaddr_in server_address;
        struct sockaddr_in client_address;

        server_sockfd = socket(AF_INET, SOCK_STREAM, 0);

        server_address.sin_family = AF_INET;
        server_address.sin_addr.s_addr = htonl(INADDR_ANY);
        server_address.sin_port = htons(9734);
        server_len = sizeof(server_address);
        err=(bind(server_sockfd, (struct sockaddr *) &server_address, server_len));

        if(err!=0) printf("bind error!\n");
        else printf("bind is ok\n");
        err=-1;

        err=(listen(server_sockfd, 5));
        if(err!=0) printf("listen error!\n");
        else printf("listen is ok\n");
        daemon(0,0);
        while(1)
        {
                char *path = "filetest";
                char buf[MAX_LINE_LEN];
                FILE *file;
                int nread;

                client_len = sizeof(client_address);
                client_sockfd = accept(server_sockfd, (struct sockaddr *) &client_address, &client_len);

                nread = read(client_sockfd, &buf, sizeof(buf) - 1);
                if (nread < 1) {
                        printf("read: %s. closing connection\n", strerror(errno));
                        close(client_sockfd);
                        continue;
                }
                buf[nread] = 0;
                printf("server got: \"%s\"\n", buf);

                if (strncmp(buf, "TEST", 4) == 0) {
                        strncpy(buf, "OK\n", sizeof(buf) -1);
                        buf[sizeof(buf) - 1] = 0;
                } else if(strncmp(buf, "GETTEST", 7) == 0) {
                        file = fopen(path, "r");
                        if (file == NULL ||
                            fgets(buf, sizeof(buf), file) == NULL) {
                                strncpy(buf, "ERR\n", sizeof(buf) -1);
                                buf[sizeof(buf) - 1] = 0;
                        }
                        if (file)
                                fclose(file);
                } else {
                        printf("bad command from client, closing connection\n");
                        close(client_sockfd);
                        continue;
                }

                printf("server answer: \"%s\"\n", buf);
                write(client_sockfd, &buf, strlen(buf));
                close(client_sockfd);
        }

}
radist04ka@
честно говоря тока одно изменение:

Код: Выделить всё

       else printf("listen is ok\n");
        daemon(0,0);
        while(1)
        {
работать в фоне оно начало конечно...
но тут вылетает глюк:

Код: Выделить всё

Escape character is '^]'.
TEST
OK
Connection closed by foreign host.
проходит нормально
а вот:

Код: Выделить всё

Connected to 192.168.50.241.
Escape character is '^]'.
GETTEST
ERR
Connection closed by foreign host.
выводит ошибку...

как мне обьснили что daemon(0,0); надо писать всегда перед циклом... а почему тогда ругается...
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-13 17:58:59

это происходит из-за того что daemon запускается из /
а как тогда указать то что файл лежит рядом с бинарником, а не статично...
./ не помогло

как указать НЕ статический путь

или как вывести путь к файлу в конфиге? и как его вообще писать то....
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение FreeBSP » 2011-02-13 22:39:47

принимай в качестве параметра. осиль getopt.h. осиль fork()
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-14 5:23:31

Код: Выделить всё

        daemon(0, 1);
        while(1)
        {
                if ((f = open(".", O_RDONLY, 0)) == -1)
                    err(1, "open()");
                if (fchdir(f) == -1)
                    err(1, "fchdir()");
сделал так:

и хоть и подключен #include <errno.h>

ругается:

Код: Выделить всё

radist04ka@radist04ka@ gcc -o TempR tempd.c
tempd.c: In function 'main':
tempd.c:43: error: called object 'err' is not a function
tempd.c:45: error: called object 'err' is not a function
из-хза чего ругается на called object 'err' is not a function если он уже прописан...
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение FreeBSP » 2011-02-14 9:29:01

не мучайся
воткни нжинХ
он выдержит
или лайтХТТПд
только xml статикой генерируй время от времени, а не динамокой на каждый запрос
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение FreeBSP » 2011-02-14 9:56:01

Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-14 10:34:54


издеваетесь, да?

я первым делом в яндогугль и вписал err.h:

Код: Выделить всё

radist04ka@ cat tempd.c | grep err
#include <errno.h>
#include <err.h>
        int err=-1;
        err=(bind(server_sockfd, (struct sockaddr *) &server_address, server_len));
        if(err!=0) printf("bind error!\n");
        err=-1;
        err=(listen(server_sockfd, 5));
        if(err!=0) printf("listen error!\n");
                    err(1, "open()");
                    err(1, "fchdir()");
                        printf("read: %s. closing connection\n", strerror(errno));

ругаетяс только на это:

Код: Выделить всё

                if ((f = open(".", O_RDONLY, 0)) == -1)
                    err(1, "open()");
                if (fchdir(f) == -1)
                    err(1, "fchdir()");
tempd.c:43: error: called object 'err' is not a function
tempd.c:45: error: called object 'err' is not a function
остальное то в порядке...
только xml статикой генерируй время от времени, а не динамокой на каждый запрос
он у меня и был статичный..кадую минуту кроном с помощью tcl скрипта генерился
не мучайся
нифига, раз начал, теперь до конца пойду...

upd. щаз по статье попробую вторую функцию err вписать...

upd.2 не получилось :)

всего вот:

Код: Выделить всё

radist04ka@ cat tempd.c | grep include
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <err.h>
#include <fcntl.h>
#include <getopt.h>
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение FreeBSP » 2011-02-14 10:39:43

QweЯty писал(а):издеваетесь, да?
я редко стебусь и еще реже издеваюсь.
чаще - пытаюсь заставить думать
ибо если не заставить - то человек потерян для сообщества

так что попытаюсь заставить думать и тебя
QweЯty писал(а):

Код: Выделить всё

radist04ka@ cat tempd.c | grep err
int err=-1;
err(1, "open()");
прочитай, вдумайся, оцени, исправь
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение FreeBSP » 2011-02-14 10:46:40

QweЯty писал(а):
не мучайся
нифига, раз начал, теперь до конца пойду...
предсказываю:
ты напишешь демона
он будет работать
он завалится под парой сотен коннектов и хорошо если не завалит за собой систему
ты вернешься к идее с вебсервером, поднимешь нжинх/лайти и будешь счастлив

хотя опыт работы на сишнике это и здорово, но лучше начинать нормально или не начинать вообще
я к тому, что начинать изучать программирование на горящем проекте это не комильфо. и использовать daemon() не зная что делает fork() это не правильно
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-14 10:57:48

и завалится под парой сотен коннектов и хорошо если не завалит за собой систему
неееее, теперь нет:)
учел это уже...
в программке, теперь чтобы сразу все соединились в один и тот же момент это должно очень хорошо повезти.. теория вероятности рулит:)) и чего я раньше не знал о таком как random();

и потом, а что мешает, если упадет, работать по нескольким портам/сокетам... тоже нагрузка упадет

и подконец, если будет совсем лень, тупо в исходниках(или конфигах) изменить порт и запустить еще одну копию из другого каталога....я так с ботами баловался... 15 штук запустил пока они не задолбали своими "разговорчивыми" модулями..
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
QweЯty
лейтенант
Сообщения: 796
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение QweЯty » 2011-02-14 11:01:11

err(1, "open()");
то есть надо открыть еще одну переменную?

вчера читал, толи про open толи про fchdir что они при нормальной работе возвращают число -1 или наоборот.
хотя другие программы наоборот работают..
щаз историю ковырял не нашел:(
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: прослушивать порт и отвечать если пришел заданный текст

Непрочитанное сообщение FreeBSP » 2011-02-14 11:07:43

переменную по другому обзови
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!