The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проблема с сокетом"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Проблема с сокетом"
Сообщение от maxval emailИскать по авторуВ закладки(ok) on 06-Дек-04, 11:19  (MSK)
Такая проблема:
Создаем сокет и ассоциируем его с файлом. Программа работает в режиме демона. При подключении через телнет выдает нужную инфу и получает комманды, т.е. все нормально. Далее на делфе пишем клиента под винду. В клиенте подключение, отправка комманды и завершение соединения проходит нормально, но если мы открываем соединение, отправляем комманды и после соединение не разрываем, а, например, пытаемся отправить следующую комманду (т.е. остаемся на линии), то ничего не происходит. Зато после закрытия соединения вываливается все, что было в буфере.
Что делать, в чем ошибка?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Проблема с сокетом"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 06-Дек-04, 12:32  (MSK)
Нужно сделать flush для сокета. Я не знаю, как это сделать в Delphi. Поищите в Google:Groups.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Проблема с сокетом"
Сообщение от Barlone Искать по авторуВ закладки on 06-Дек-04, 12:48  (MSK)
>Что делать, в чем ошибка?
Выкинуть компонет TClientSocket и работать с соктами напрямую через WinApi
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Проблема с сокетом"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 06-Дек-04, 12:50  (MSK)
>>Что делать, в чем ошибка?
>Выкинуть компонет TClientSocket и работать с соктами напрямую через WinApi

Ну к чему же? Давайте вообще Delphi выкинем... а?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Проблема с сокетом"
Сообщение от klalafuda emailИскать по авторуВ закладки on 06-Дек-04, 13:08  (MSK)
>>>Что делать, в чем ошибка?
>>Выкинуть компонет TClientSocket и работать с соктами напрямую через WinApi
>
>Ну к чему же? Давайте вообще Delphi выкинем... а?

тык, давно пора.. как классовый элемент :)

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Проблема с сокетом"
Сообщение от maxval emailИскать по авторуВ закладки(ok) on 06-Дек-04, 15:02  (MSK)
>>>>Что делать, в чем ошибка?
>>>Выкинуть компонет TClientSocket и работать с соктами напрямую через WinApi
>>
>>Ну к чему же? Давайте вообще Delphi выкинем... а?
>
>тык, давно пора.. как классовый элемент :)
>
>// wbr


хм... вообще то я как раз через Win Api и работаю.... =))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Проблема с сокетом"
Сообщение от XMan Искать по авторуВ закладки(ok) on 07-Дек-04, 21:16  (MSK)
Как мы следим за ходом работы ? Я так подозреваю, сервер вываливает на экран команды ?
Стойкой подозрение на буферизацию вывода. То есть, на самом деле оно всё работает, но видишь ты это только после того, как заполнишь буфер экрана и он сбросится (порядка 2к текста кажись).

Простейшее решение - в сервере добавлять к выводу каждой строки \n

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Проблема с сокетом"
Сообщение от maxval emailИскать по авторуВ закладки(ok) on 09-Дек-04, 16:06  (MSK)
>Как мы следим за ходом работы ? Я так подозреваю, сервер вываливает
>на экран команды ?
>Стойкой подозрение на буферизацию вывода. То есть, на самом деле оно всё
>работает, но видишь ты это только после того, как заполнишь буфер
>экрана и он сбросится (порядка 2к текста кажись).
>
>Простейшее решение - в сервере добавлять к выводу каждой строки \n


Хм... а как отключить буферизацию вывода? Сервер все равно на команды не реагирует...

Вот исходник:

int main(int argv, char **argc)
{
    int res, c,j;
    struct sockaddr_in ssa, csa;
// Make socket
    if ((res = socket (AF_INET, SOCK_STREAM, 0)) == -1) { perror ("Socket call error"); exit (1); }
// Create Addres of node
    ssa.sin_family = AF_INET;
    ssa.sin_addr.s_addr = INADDR_ANY;
    ssa.sin_port = htons(1500);
// Connect Socket with Addr
    if (bind (res,(struct sockaddr *)&ssa,sizeof(ssa)) == -1) { perror ("Bind call error"); exit (1); }
    if (listen (res, 5) == -1) { perror ("Listen call error"); exit (1); }
    while(1)
    {
socklen_t addrlen=sizeof(csa);
if ((c = accept (res,(struct sockaddr *)&csa,&addrlen)) == -1) { perror ("Accept call error"); exit (1);}

char *ret,*buffer;
int i=0;
FILE *fp;
buffer=(char*)malloc(1024);
fp=fdopen(c,"w+");
while(i!=1 && i!=2 && !feof(fp))
{
    fprintf(fp,">");
    ret=fgets(buffer,1024,fp);
    buffer[strlen(buffer)-2]=0;
    puts(buffer);
    if(strcasecmp(buffer,"exit")==0) { i=1; fprintf(fp,"Close socket.\n"); }
    else if(strcasecmp(buffer,"shutdown")==0) { i=2; fprintf(fp,"shutdown.\n"); }
    bzero(buffer,1024);
}
fclose(fp);
close(c);
bzero(buffer,1024);
if(i==2) exit(1);

    }
return 0;
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Проблема с сокетом"
Сообщение от XMan Искать по авторуВ закладки(ok) on 09-Дек-04, 22:53  (MSK)
Фиг его знает. Если верить ману на puts, то она автоматом добавляет \n после вывдоа данных. Должно работать. Может действительно на стороне win буферизация идет ?

Между прочим, конструкция "buffer[strlen(buffer)-2]=0;" потенциально опасна - strlen может выбраться за границы буфера и получишь "segmentation fault". И bzero лучше использовать перед заполнение буфера, а не в конце цикла.

PS. Кстати, а не пробовал работать непосредственно с сокетом, а не с его производной на fp ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Проблема с сокетом"
Сообщение от maxval emailИскать по авторуВ закладки(ok) on 10-Дек-04, 18:15  (MSK)
>Фиг его знает. Если верить ману на puts, то она автоматом добавляет
>\n после вывдоа данных. Должно работать. Может действительно на стороне win
>буферизация идет ?
>
>Между прочим, конструкция "buffer[strlen(buffer)-2]=0;" потенциально опасна - strlen может выбраться за границы
>буфера и получишь "segmentation fault". И bzero лучше использовать перед заполнение
>буфера, а не в конце цикла.
>
>PS. Кстати, а не пробовал работать непосредственно с сокетом, а не с
>его производной на fp ?


Пробовал, такая же фигня, блин....

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Проблема с сокетом"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 10-Дек-04, 18:16  (MSK)
А зачем заморачивать на этой системной дряни? Почему бы не взять написаный движок какой-то .. например ACE+TAO (Corba)...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "Проблема с сокетом"
Сообщение от maxval emailИскать по авторуВ закладки(ok) on 12-Дек-04, 11:59  (MSK)
>А зачем заморачивать на этой системной дряни? Почему бы не взять написаный
>движок какой-то .. например ACE+TAO (Corba)...

Я в этом не разбираюсь... :-(

  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "Проблема с сокетом"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 12-Дек-04, 17:18  (MSK)
Есть классная книжка - ACE+TAO development. Очень дельная вещь, кроссплатформенная, нет заморочек с такими низкоуровнемы операциями как socket и т.п. (может быть нам вернуться к ассемблеру?:)) .. а главное - раз два и готов мощный сервер, понятный, легкий для сопровождения! Почитай так же о CORBA, IDL и т.п. Исходники открыты, куча документации, mailing листы.

Сейчас такие системы широко распространены! Советую.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Проблема с сокетом"
Сообщение от maxval emailИскать по авторуВ закладки(ok) on 10-Дек-04, 18:18  (MSK)
Главное через телнет все работает хорошо...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "Проблема с сокетом"
Сообщение от XMan Искать по авторуВ закладки(ok) on 10-Дек-04, 21:14  (MSK)
Проследи каким-нибудь iptraf-ом протекание процесса. Если пакеты с win-клиента приходят в момент их передачи, то проблема на сервере. Если они приходят в момент завершения соединения, то проблема в клиенте.
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру