Вот хачу написать программку, суть такая:Клиент/Серверное приложение в операционке Юникс. К нему конектистя клиент из вне (в данный момен я написал клиент на паскале в Дельфи, который конектится к серверу в юниксе и ему можно отправлять данные - текст)
В данном случае работает программа так:
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..
вот и все. Пожалуйста гляньте чекаго. подскажите как сделать, если есть пример, подкиньте плиз. алгоритм хотябы дайте. Буду премного благодарен.
делал по инфе "Программирование сокетов в Линух" А. Шаргин
>Вот хачу написать программку, суть такая:
....
>по поводу 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&cat...
Спасибо! по пробую оптимизировать..