Сокеты

Сокеты

Сообщение podkmax » 30 мар 2009, 15:59

Подскажите хорошую книгу по програмированию сокетов, что-нибудь по типу как Карниган и Ритчи или Стивенс, так что бы основы основ =)
podkmax
 
Сообщения: 39
Зарегистрирован: 21 сен 2008, 12:45

Re: Сокеты

Сообщение podkmax » 30 мар 2009, 20:39

Вприципе уже сам нашёл две книги Стивенса
У. Стивенс. UNIX. Разработка сетевых приложений
У. Стивенс - Unix. Взаимодействие процессов
как раз вроде то, что нам нужно
хотя я думаю этого хватит пока что наверно, но может кто ещё что посоветует? :smile:
podkmax
 
Сообщения: 39
Зарегистрирован: 21 сен 2008, 12:45

Re: Сокеты

Сообщение kluchev » 31 мар 2009, 12:02

Уолтон. Создание сетевых приложений в среде Linux. Руководство разработчика
Теренс Чан. Системное программирование на C++ для Unix
Снейдер Й. Эффективное программирование TCP/IP. Библиотека программиста

Немного из другой области, но всё равно неплохой сайтик с примерами на разных языках: http://www.java2s.com/

Для отладки удобно использовать язык Perl.
Для изготовления простого сервера можно воспользоваться inetd.
В споре рождается коллективное заблуждение, а истиной мы его называем для краткости
Аватара пользователя
kluchev
 
Сообщения: 995
Зарегистрирован: 04 апр 2008, 13:31
Откуда: SPb

Re: Сокеты

Сообщение podkmax » 13 апр 2009, 19:33

Ещё вопрос по поводу мэйк файла, обещали дать пример простейшей его реализации =)
Напомню, что у меня есть несколько исходных файлов, несколько заголовочных, хочу чтобы исходные файлы валялись в папке ./src, а заголовочные соответсвенно в ./include, как мне это указать это в мэйк-файле, смотрел примеры мэйк-файлов которые идут с лабораторными к сдк, но так и не понял.
podkmax
 
Сообщения: 39
Зарегистрирован: 21 сен 2008, 12:45

Re: Сокеты

Сообщение kluchev » 13 апр 2009, 21:39

Nothing писал(а):Ещё вопрос по поводу мэйк файла, обещали дать пример простейшей его реализации =)
Напомню, что у меня есть несколько исходных файлов, несколько заголовочных, хочу чтобы исходные файлы валялись в папке ./src, а заголовочные соответсвенно в ./include, как мне это указать это в мэйк-файле, смотрел примеры мэйк-файлов которые идут с лабораторными к сдк, но так и не понял.


Вот как-то так примерно...

Код: Выделить всё
NAME    = test
CC      = g++
CFLAGS  = -I ../INCLUDE   -c -Wno-write-strings -g

PROJECT  = $(shell cat PROJECT)
VERSION  = $(shell cat VERSION)
BUILD    = $(shell cat BUILD)
TYPE     = $(shell cat TYPE)

PROJECTNAME = ${PROJECT}-${VERSION}-${BUILD}-${TYPE}
TARBALL  = ${PROJECTNAME}.tar

SRC_DIR   = ../SRC
BIN_DIR   = ../BIN

all: test tobin

clean:
        rm -f $(BIN_DIR)/$(NAME)
        rm -f $(BIN_DIR)/*.o
        rm -f $(BIN_DIR)/*.d
        rm -f $(BIN_DIR)/m3p_*.txt
        rm -f *.o
        rm -f *.d
        rm -f *.tar.gz
        rm -f m3p_*.txt


dist:
        tar cvf $(TARBALL) *
        gzip $(TARBALL)

# ---------------------------------------------------------------------------

source_dirs := $(SRC_DIR)

search_wildcards := $(addsuffix /*.cpp,$(source_dirs))

suno_net: $(notdir $(patsubst %.cpp,%.o,$(wildcard $(search_wildcards))))
        $(CC) $^ -o $@
        #       $(CC) $^ -o $@ $(LFLAGS)
VPATH := $(source_dirs)

%.o: %.cpp
        $(CC) -MD $(CFLAGS) $(addprefix -I,$(source_dirs)) $<
#       $(CC) -MD $(CFLAGS) $(LIB_INC) $(addprefix -I,$(source_dirs)) $<

include $(wildcard *.d)

tobin:
        mv *.o $(BIN_DIR)
        mv *.d $(BIN_DIR)
        rm -f m3p_*.txt
В споре рождается коллективное заблуждение, а истиной мы его называем для краткости
Аватара пользователя
kluchev
 
Сообщения: 995
Зарегистрирован: 04 апр 2008, 13:31
Откуда: SPb

Re: Сокеты

Сообщение podkmax » 13 апр 2009, 22:30

О, отлично, спасибо :good:
podkmax
 
Сообщения: 39
Зарегистрирован: 21 сен 2008, 12:45

Re: Сокеты

Сообщение podkmax » 03 май 2009, 11:27

Созрел вопрос по поводу реализации уровней абстракции
Каждая программа отвечающая за собственный уровень, должна быть отдельной или запускаться как дочерний процесс?
Просто если использовать именованые каналы FIFO, нелогично создавать дочерние процессы, а так, например, разбив на три уроня, получиться что надо будет запустить два сервера, которые буду общаться между собой, а потом запускать клиент.
Блин, не могу сформулировать правильно... кароче вот так:
На клиентской машине(отдельная машина со всеми этими прогами):

( 1 ) ---> ( 2 ) ---> ( 3 )

Итак, ОДИН - это клиент-прога, реализующая верхний уровень, она чо то делает, и по трубе передаёт в ДВА. ДВА - сервер-прога, реализующая следующий уровень, она должна уже быть запущена. Она передает опять таки через FIFO трубу данные в ТРИ. Три - это снова сервер-прога реализующая следующий уровень. ОНА принимает данные от ДВА и пуляет их в сокет. На стороне серверной машины те же уровни.
Так вот, к чему это я, получается нужно запустить два сервера и клиент на одной стороне и то же самое на другой.
Либо же использовать дочерние процессы?
Либо же может быть, чтобы сервер был один и он запускал дочерний процесс... ммм... или как то так... кароче непонимаю я чо то как сделать :o
Помогите, а?
podkmax
 
Сообщения: 39
Зарегистрирован: 21 сен 2008, 12:45

Re: Сокеты

Сообщение kluchev » 06 май 2009, 15:27

Nothing писал(а):Созрел вопрос по поводу реализации уровней абстракции
Каждая программа отвечающая за собственный уровень, должна быть отдельной или запускаться как дочерний процесс?

Всё равно. Можно и так и эдак, лишь бы были выделены процессы.

Просто если использовать именованые каналы FIFO, нелогично создавать дочерние процессы, а так, например, разбив на три уроня, получиться что надо будет запустить два сервера, которые буду общаться между собой, а потом запускать клиент.
Блин, не могу сформулировать правильно... кароче вот так:
На клиентской машине(отдельная машина со всеми этими прогами):

( 1 ) ---> ( 2 ) ---> ( 3 )

Итак, ОДИН - это клиент-прога, реализующая верхний уровень, она чо то делает, и по трубе передаёт в ДВА. ДВА - сервер-прога, реализующая следующий уровень, она должна уже быть запущена. Она передает опять таки через FIFO трубу данные в ТРИ. Три - это снова сервер-прога реализующая следующий уровень. ОНА принимает данные от ДВА и пуляет их в сокет. На стороне серверной машины те же уровни.
Так вот, к чему это я, получается нужно запустить два сервера и клиент на одной стороне и то же самое на другой.
Либо же использовать дочерние процессы?


Я и так и так делал. Если использовать треды, то будет стожнее, но зато быстро. Если каналы и отдельные программы, то проще, но медленно.
В споре рождается коллективное заблуждение, а истиной мы его называем для краткости
Аватара пользователя
kluchev
 
Сообщения: 995
Зарегистрирован: 04 апр 2008, 13:31
Откуда: SPb


Вернуться в Архив "ПОВС" (2009)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1