Article View: pl.comp.os.linux.programowanie
Article #60328fork i sockety
From: Maciej Piekielniak
Date: Thu, 03 Nov 2005 11:46
Date: Thu, 03 Nov 2005 11:46
42 lines
2428 bytes
2428 bytes
Witam.
Napisałem prosty czat server, do którego łączą się klienci, dla każdego
klienta tworzony jest nowy proces fork()
i każd proces odczytuje sobie to co wysłał mu jego klient. Dzięki temu kilku
klientów w tej samej chwili może wysyłać swoje wiadomości do serwera.
Wszystko działa ładnie. Tylko chciałbym jeszcze zrobić tak, żeby wiadomość
od każdego klienta nie dostawał tylko serwer ale także pozostali klienci.
Jak to zrobić?
while(1)
{
printf("Czekam na połączenie\n");
if((sockfd = accept(listenfd,(struct
sockaddr*)&adres_klienta,&klient_len)) == -1)
WYJDZ("Błąd z akceptacją połączenia\n");
klient++;
printf("Polaczenie z %s i socket %d\n",
inet_ntoa(adres_klienta.sin_addr),sockfd);
pid_t pid = fork();
if(!pid)
{
while(1)
{
int odp = read(sockfd, &paczka,sizeof(paczka));
if(odp<0) { printf("Błąd odczytu\n"); break;}
if(odp==0) { printf("Połączenie zamknięte\n"); break; }
printf("Odebrałem: %s ",paczka.tekst);
printf("\tBajtów: %d od klienta %d\n",odp,klient);
}
close(sockfd);
exit(0);
}
}
--
Archiwum grupy: http://niusy.onet.pl/pl.comp.os.linux.programowanie
Technical Details
Message-ID:
<003701c5e06c$1f617e60$1100a8c0@maciek>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsgate.onet.pl!newsgate.plShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsgate.onet.pl!newsgate.pl From: piechcio@isb.com.pl (Maciej Piekielniak) Newsgroups: pl.comp.os.linux.programowanie Subject: fork i sockety Date: 3 Nov 2005 12:46:07 +0100 Organization: email<>news gateway Lines: 43 Message-ID: <003701c5e06c$1f617e60$1100a8c0@maciek> NNTP-Posting-Host: newsgate.onet.pl Mime-Version: 1.0 X-Trace: newsgate.test.onet.pl 1131018367 5526 213.180.130.18 (3 Nov 2005 11:46:07 GMT) X-Complaints-To: abuse@onet.pl NNTP-Posting-Date: 3 Nov 2005 11:46:07 GMT X-Mailer: Microsoft Outlook Express 6.00.2900.2180 X-Received: (root@newsgate.test.onet.pl) by newsgate.test.onet.pl id <S114980AbVKCLp5>; Thu, 3 Nov 2005 12:45:57 +0100 X-Received: from isb.com.pl ([212.160.150.140]:14487 "EHLO isb.com.pl") by newsgate.test.onet.pl with ESMTP id <S114974AbVKCLpo>; Thu, 3 Nov 2005 12:45:44 +0100 X-Received: from maciek (sembrz [192.168.1.50]) by isb.com.pl (Postfix) with SMTP id 465A8461CD for <pl-comp-os-linux-programowanie@newsgate.pl>; Thu, 3 Nov 2005 12:43:13 +0100 (CET) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit