LINUX.ORG.RU

Sockets on FPC


0

0

Нужно сделать небольшой макет, чтобы узнать как работает архитектура. По многим причинам(объективным) был выбран FreePascal, поэтому прошу не писать тут что-то типа "Pascal в топку". Никак не пойму как реализовать кросплатформенные сокеты(работа в Win,Linux, Mac OS X). Приложение консольное. Где можно почитать доку? Или как реализовать соединение, передачу и т.д. Интересует ТОЛЬКО серверная сторона

2klalafuda

Я извиняюсь, искал на русском. Это я видел, но мне очень трудно с этим разобраться(почему-то, может просто туплю сегодня, траблы с инглишем). Меня интересует простой пример-создание сокета, присваивание некоторого идентификатора каждому подключившемуся(помню как-то в Delphi делал, вечером посмотрю), обработка поступившей строки и отсылка

Motiv_studenta ★★
() автор топика
Ответ на: комментарий от Motiv_studenta

> Я извиняюсь, искал на русском. Это я видел, но мне очень трудно с этим разобраться(почему-то, может просто туплю сегодня, траблы с инглишем). Меня интересует простой пример-создание сокета, присваивание некоторого идентификатора каждому подключившемуся(помню как-то в Delphi делал, вечером посмотрю), обработка поступившей строки и отсылка

тогда звиняйте, на русском я ничем не могу помочь.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от Motiv_studenta

> Меня интересует

Что в C, что FPC, imho, это будет выглядетть примерно одинаково, imho:
 socket() -> bind() -> listen() -> accept() -> read () -> PROCESSING -> write()

Для клиента -- подобным образом. Вроде бы ничего не напутал ;).

kondor ★★★
()
Ответ на: комментарий от Motiv_studenta

Кажись я разобрался. Почитал системное программирование в UNIX на паскале. Возник вопрос по части кода, принимающего и отсылающего сообщения:
while true do
begin
(* Принимает запрос на установку соединения *)
newsockfd := accept (sockfd, client, clientaddrlen);
if newsockfd = -1 then
begin
perror ('Ошибка вызова accept');
continue;
end;

(* Создает дочерний процесс для работы с соединением *)
if fork = 0 then
begin
(* Принимает данные *)
while recv (newsockfd, c, 1, 0) > 0 do
begin
(* Преобразовывает строчный символ в прописной *)
c := upcase (c);
(* Пересылает символ обратно *)
send (newsockfd, c, 1, 0);
end;
end;
end;
end.


В delphi есть такая вещь, как идентификатор Socket.SocketHandle . Тоесть каждому новому клиенту присваивается числовое значение, с которым можно вести работу.
Как мне его узнать в паскале? Т.к клиент после подключения шлёт строку типа "user:password" , и надо ассоциировать user'a с его номером

Motiv_studenta ★★
() автор топика
Ответ на: комментарий от Motiv_studenta

ажись я ступил. После коннекта организуется новый поток, который и работает с подключившемся клентом, так? Тогда всё просто)))). Спасибо за доки

Motiv_studenta ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.