The OpenNET Project / Index page

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

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

"Помогите плиз новичку в с/с++ под линух (юникс)"
Сообщение от netic emailИскать по авторуВ закладки on 30-Июн-04, 15:50  (MSK)
Вот хачу написать программку, суть такая:

Клиент/Серверное приложение в операционке Юникс. К нему конектистя клиент из вне (в данный момен я написал клиент на паскале в Дельфи, который конектится к серверу в юниксе и ему можно отправлять данные - текст)

В данном случае работает программа так:

1. Запускается ждет соединения
2. Как тока конектится клиент (Дельфевая прога) сразу говорит что приконектился клиент с таким то адресом
3. и все слушает его.
4. Клиент при нажатии на кнопку "Отправить" отправляет ему текст, код такой:
    cl это - TSockClient
    cl.Socket.SendText('startcon');
5. Сервак принимает и показывает текст.
6. после того как клиент отключается при помощи команды _exit(0) в процессах появляется [test <defunct>] где test название процесса (т.е. прогграммы (имя файла))

Вот код программы:

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

int main (int argc, char *argv[])
    {
    int sock, server;
    struct sockaddr_in addr, client;
    char buf[1024], outbuf[1024];
    int byte_read, li, claddrlen;

    claddrlen=sizeof(client);
    
    server=socket(AF_INET, SOCK_STREAM,0);        
    if (server<0) {printf("Error Create Sock\n"); exit(1);}
    
    printf("Socket created\n");
    
    addr.sin_family=AF_INET;
    addr.sin_port=htons(5124);
    addr.sin_addr.s_addr=htonl(INADDR_ANY);
    
    if (bind(server, (struct sockaddr*)&addr, sizeof(addr)) < 0)
{printf("Error Bind\n");exit(1);}

    printf("Bind ok.\n");

    listen(server, 20);

    while(1)
        {
sock=accept(server, NULL, NULL);
    
        getpeername(sock,(struct sockaddr*)&client, &claddrlen);
        printf("Client %s connected\n", inet_ntoa(client.sin_addr));
printf("Start reciving data....\n");

switch(fork())
         {
    case -1:
perror("fork");
break;
    
    case 0:
close(server);

while (1)
    {
    byte_read=recv(sock, buf, 1024, 0);
    if (byte_read <=0 ) break;

    sprintf(outbuf, "%s: %s\n",inet_ntoa(client.sin_addr), buf);
    fputs(outbuf, stdout);
    
    send(sock, buf, byte_read, 0);
    }
    
close(sock);
printf("Client %s disconnected.\n", inet_ntoa(client.sin_addr));
_exit(0);

    default:
close(sock);
break;    
     }

}
    
    return 0;
    }

Что хочется чтобы было в программе:

1. одновременное получение и отправки данных. т.е. чат 1 на 1..

вот и все. Пожалуйста гляньте чекаго. подскажите как сделать, если есть пример, подкиньте плиз. алгоритм хотябы дайте. Буду премного благодарен.
делал по инфе "Программирование сокетов в Линух" А. Шаргин

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

 Оглавление

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

1. "Помогите плиз новичку в с/с++ под линух (юникс)"
Сообщение от foxru Искать по авторуВ закладки(ok) on 30-Июн-04, 18:39  (MSK)
>Вот хачу написать программку, суть такая:
....
>

по поводу 6 пункта
это означает что появился зомби, процесс который завершился но не было обработанно его завершение
http://www.opennet.me/base/dev/wait_zombie.txt.html
http://www.opennet.me/base/dev/chldfork.txt.html
после того как завершаеться процесс потомок которого ты создал fork'ом родительский процесс получает сигнал SIGCHLD
его тебе и надо обработать
на эту тему смотри wait
http://www.opennet.me/cgi-bin/opennet/man.cgi?topic=wait&category=2

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

2. "Помогите плиз новичку в с/с++ под линух (юникс)"
Сообщение от netic emailИскать по авторуВ закладки on 30-Июн-04, 19:59  (MSK)
Спасибо! по пробую оптимизировать..
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

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




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

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