использование socket'ов в C++
Модератор: Модераторы разделов
-
0xFF
- Сообщения: 267
- ОС: Gentoo
использование socket'ов в C++
Задача - сервер. Реализация на C++ с использованием сокетов.
Нужна инфа по программированию сокетов. Сам добрался только до схемы сервер<->клиент, а надо сервер<->много клиентов.
Возрадуюсь любым линкам, относящимся к теме.
Нужна инфа по программированию сокетов. Сам добрался только до схемы сервер<->клиент, а надо сервер<->много клиентов.
Возрадуюсь любым линкам, относящимся к теме.
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: использование socket'ов в C++
Ищите по pthread, fork
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: использование socket'ов в C++
http://hub.ru/modules.php?name=Downloads&d...download&cid=22 - Андрей Робачевский - ОС UNIX - есть даже работающий пример. А вообще гугл ... примеров должно быть достаточно.
-
fatboy
- Сообщения: 156
- ОС: Zenwalk Linux, Windows XP
Re: использование socket'ов в C++
Zenwalk 4.0
TOSHIBA Satellite A100
TOSHIBA Satellite A100
-
0xFF
- Сообщения: 267
- ОС: Gentoo
Re: использование socket'ов в C++
diesel писал(а): ↑30.06.2006 22:10
http://hub.ru/modules.php?name=Downloads&d...download&cid=22 - Андрей Робачевский - ОС UNIX - есть даже работающий пример. А вообще гугл ... примеров должно быть достаточно.
Прямо в яблочко,
РесПекТ
-
Ardzhan
- Сообщения: 57
- ОС: Debian + WinXP на виртуалке
Re: использование socket'ов в C++
Юзай select();
Пример использования сокетов можно найти на http://beej.us/guide/bgnet/
Пример использования сокетов можно найти на http://beej.us/guide/bgnet/
-
0xFF
- Сообщения: 267
- ОС: Gentoo
Re: использование socket'ов в C++
Ardzhan писал(а): ↑02.07.2006 17:33Юзай select();
Пример использования сокетов можно найти на http://beej.us/guide/bgnet/
хм... сильно. Как я понял, ресурс в теории динамически развивающийся, тпа LFS, только из-за недостатка финансовой мотивации последний раз обновлялся давно...
Спасибо
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: использование socket'ов в C++
Вот еще, по вашему вопросу про соккеты:
http://linuxcenter.ru/lib/books/qt3/qt3_17...KINGWITHQSOCKET
http://linuxcenter.ru/lib/books/qt3/qt3_17...KINGWITHQSOCKET
-
nerezus
- Сообщения: 525
- Статус: Вселенский отказник
- ОС: windoze
Re: использование socket'ов в C++
http://nerezus.narod.ru/books/tcpip.rar
446kb
Правда тут имеется ввиду C, а не C++. Но общие принципы вроде те же =)
446kb
Правда тут имеется ввиду C, а не C++. Но общие принципы вроде те же =)
ICQ 547097
-
0xFF
- Сообщения: 267
- ОС: Gentoo
Re: использование socket'ов в C++
nerezus писал(а): ↑04.07.2006 10:27http://nerezus.narod.ru/books/tcpip.rar
446kb
Правда тут имеется ввиду C, а не C++. Но общие принципы вроде те же =)
...неплохо... но не то что надо
перелохматив всю оговоренную выше инфу, начал писать сервер. Больше всего пользы наблюдалось от ресурса http://beej.us/guide/bgnet/. Там есть понятный пример - мультиплексный сервер на примере чата, который можно использовать в качестве каркаса масштабируемого сервера. Мультиклиентность реализована select()'ом.
.....конечно не идеал производительности... чтож будем полировать по мере надобности..
... И ОТДЕЛЬНОЕ ОГРОМНОЕ СПАСИБО diesel'у за отличные книги в электронном виде.
-
agbr
- Сообщения: 486
- ОС: openSUSE 10.2
Re: использование socket'ов в C++
привет,
что-то мне ник твой такой знакомый =)
могу подкинуть пару идей относительно твоей проблемы, можешь почитать сам в исходниках небезызвестной программы hydranode - ибо там сделано на c++, и действительно качественно.
основная идея - использовать select/poll
что-то мне ник твой такой знакомый =)
могу подкинуть пару идей относительно твоей проблемы, можешь почитать сам в исходниках небезызвестной программы hydranode - ибо там сделано на c++, и действительно качественно.
основная идея - использовать select/poll
jabber: agbr@jabber.ru
против проприетарного ПО в GNU/Linux
против проприетарного ПО в GNU/Linux
-
agbr
- Сообщения: 486
- ОС: openSUSE 10.2
Re: использование socket'ов в C++
куда уж производительней то? быстрее системного вызова ничего работать не будет.
jabber: agbr@jabber.ru
против проприетарного ПО в GNU/Linux
против проприетарного ПО в GNU/Linux
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: использование socket'ов в C++
форкаться немного медленнее, чем юзать селект, но гораздо проще для начинающих...
слава роботам!
-
agbr
- Сообщения: 486
- ОС: openSUSE 10.2
Re: использование socket'ов в C++
форкаться -- это не значит сервер<->много клиентов, поэтому такое предложение вообще не подходит в качестве решения.
jabber: agbr@jabber.ru
против проприетарного ПО в GNU/Linux
против проприетарного ПО в GNU/Linux
-
d_Sun
- Сообщения: 291
-
0xFF
- Сообщения: 267
- ОС: Gentoo
-
0xFF
- Сообщения: 267
- ОС: Gentoo
Re: использование socket'ов в C++
Видел пример асинхронного сервера под .NET. В статье писалось, что он оптимальнее многопоточного и select()'ового.... но Господи упаси меня что-нить серьёзное писать под !@#$%^&*
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: использование socket'ов в C++
простите, а что есть «асинхронный сервер» и чем он отличается от использования select ?
слава роботам!
-
agbr
- Сообщения: 486
- ОС: openSUSE 10.2
Re: использование socket'ов в C++
fork создает КОПИЮ текущего процесса, это значит, что каждым клтиентом занимается отдельный процесс, и работать вместе они естественно не могут, т.е. тут реализуется ситуация сервер<->клиент
В вендах?
В POSIX ты лучше select ничего не найдешь, ибо это труъ, надо только правельно с ним работать, чтобы в while(1) не вошел =)
jabber: agbr@jabber.ru
против проприетарного ПО в GNU/Linux
против проприетарного ПО в GNU/Linux
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: использование socket'ов в C++
а про IPC Вам в детском садике не рассказывали, да?работать вместе они естественно не могут
слава роботам!
-
agbr
- Сообщения: 486
- ОС: openSUSE 10.2
Re: использование socket'ов в C++
Ну, раз такой умный, то изобрази, так чтобы каждый клиент, который подключается получал список ip-адресов других клиентов.
jabber: agbr@jabber.ru
против проприетарного ПО в GNU/Linux
против проприетарного ПО в GNU/Linux
-
d_Sun
- Сообщения: 291
Re: использование socket'ов в C++
Вы бы лучше не пороли чушь тут, а почитали бы книги:
У.Р. Стивенс "Разработка сетевых приложений"
У.Р. Стивенс "Взаимодействие процессов"
Имеется в виду неблокируемый В/В в сокеты. Ну я так подозреваю по крайней мере
Моя подпись сильно длинная :)
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: использование socket'ов в C++
d_Sun
agbr
если ты изобразишь эту фигню с использованием потоков или select, то я потом переделаю ее под форк.
а писать с нуля - нах. мне жаль тратить свое время на дураков.
вот я и спрашиваю, а чем это отличается от select, который обеспечивает тот же самый неблокирыемый вв? я так понял, что под виндой просто select нету, поэтому они опять придумали велосипед на квадратных колесах, а теперь пытаются всех убедить, что он едет быстрее, чем на круглых......Имеется в виду неблокируемый В/В в сокеты
agbr
если ты изобразишь эту фигню с использованием потоков или select, то я потом переделаю ее под форк.
а писать с нуля - нах. мне жаль тратить свое время на дураков.
слава роботам!
-
d_Sun
- Сообщения: 291
Re: использование socket'ов в C++
elide писал(а): ↑14.07.2006 14:27вот я и спрашиваю, а чем это отличается от select, который обеспечивает тот же самый неблокирыемый вв? я так понял, что под виндой просто select нету, поэтому они опять придумали велосипед на квадратных колесах, а теперь пытаются всех убедить, что он едет быстрее, чем на круглых......
Есть в винде select! Сорри ошибся я...
The select function determines the status of one or more sockets, waiting if necessary, to perform synchronous I/O.
Моя подпись сильно длинная :)
-
0xFF
- Сообщения: 267
- ОС: Gentoo
Re: использование socket'ов в C++
(d_Sun @ Jul 14 2006, в 18:13) писал(а):Вы бы лучше не пороли чушь тут, а почитали бы книги:
У.Р. Стивенс "Разработка сетевых приложений"
У.Р. Стивенс "Взаимодействие процессов"
Если есть в нете, можно ссылочку?
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: использование socket'ов в C++
я нашел англоязычные, но там две книги порядка 100 метров каждая
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: использование socket'ов в C++
для начала, http://rapidshare.de/files/835571/Stivens_...zeniy.djvu.html
взаимодействие процессов точно было, но за первые 30 секунд не нашлось, а тратить больше 30 секунд на помощь человеку, которому лень самостоятельно погуглить, я не собираюсь.
взаимодействие процессов точно было, но за первые 30 секунд не нашлось, а тратить больше 30 секунд на помощь человеку, которому лень самостоятельно погуглить, я не собираюсь.
слава роботам!
-
fatboy
- Сообщения: 156
- ОС: Zenwalk Linux, Windows XP
Re: использование socket'ов в C++
IPC & Network Programming (.pdf)
Zenwalk 4.0
TOSHIBA Satellite A100
TOSHIBA Satellite A100
-
agbr
- Сообщения: 486
- ОС: openSUSE 10.2
Re: использование socket'ов в C++
а у меня нет времени, чтобы доказывать дуракам, что они дураки.
откомпилируй, и запусти это:
Код: Выделить всё
#include <sys/types.h>
#include <unistd.h>
#include <iostream>
int i=0;
void funct(int pid){
for(int j=0;j<10;j++){
std::cout << pid << "=pid; i=" << i++ << std::endl;
}
}
int main(){
pid_t pid=fork();
funct(pid);
return 0;
}и посмотри, чем отличается от этого
Код: Выделить всё
#include <sys/types.h>
#include <unistd.h>
#include <iostream>
int i=0;
void funct(int pid){
for(int j=0;j<10;j++){
std::cout << pid << "=pid; i=" << i++ << std::endl;
}
}
int main(){
pid_t pid=0;
funct(pid);
funct(pid);
return 0;
}jabber: agbr@jabber.ru
против проприетарного ПО в GNU/Linux
против проприетарного ПО в GNU/Linux
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: использование socket'ов в C++
я и без компиляции могу понять чем отличаются эти два куска. только какое это имеет отношение к
тебе уже давали полезный совет. почитай про IPC, а после этого уже пытайся казаться умным. и все-таки с клиентами и ip-адресами напиши код, ага.
помедитируй над этим фрагментом, а уже потом рассказывай про то, что "работать вместе они естественно не могут"...каждым клтиентом занимается отдельный процесс, и работать вместе они естественно не могут
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
const int thr = 12;
int prc_num = 4;
int *counter = 0;
void init(void){
int h = shmget(IPC_PRIVATE, 1024, 0600);
counter = (int*)shmat(h, 0, 0);
shmctl(h, IPC_RMID, NULL);
}
void run(void){
if(fork())return;
while(*counter < thr){
printf("child process pid: %d; counter: %d\n", getpid(), (*counter)++);
sleep(1);
}
exit(0);
}
int main(){
init();
printf("main process pid: %d\n", getpid());
while(prc_num--) run();
while(*counter < thr);
printf("main process pid: %d: exit\n", getpid());
return 0;
}тебе уже давали полезный совет. почитай про IPC, а после этого уже пытайся казаться умным. и все-таки с клиентами и ip-адресами напиши код, ага.
слава роботам!