|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.09.2009, 15:16 | #1 |
Пользователь
Регистрация: 19.06.2008
Сообщений: 32
|
Подскажите, пожалуйста, по сокетам
Разрабатываю следующую систему:
Есть компьютер преподавателя и 6 компьютеров учеников. С компьютера преподавателя произвольному ученику отправляется задание. Ученик выполняет задание и по завершению отправляет результаты обратно преподу. Затем препод по желанию может направить задание другим ученикам. Одновременно могут выполнять задания от 1-го до 6-ти соответственно учеников. Как я это собираюсь делать и суть вопроса: Я предполагаю решать это на основе сокетов. На компьютерах учеников после запуска системы запускаются нити, ожидающие запроса от преподавателя, и ждут подключения. У каждого ученика свой адрес порта, впрочем это детали. На компьютере преподавателя при необходимости отправить задание запускается нить для установления соединения с выбранным учеником. Дальше происходит соединение, обмен данными и все такое. Затем соединение закрывается, сокеты и процессы убиваются с обеих сторон. Держать соединение до завершения работы учеником мне видится нецелесообразным. На компе препода запускается нить, ожидающая обратного подключения от ученика. Сколько учеников, столько ждущих нитей. По завершению работы ученик отправляет результаты, на его компьютере запускается новая, ждущая следующего задания, нить. Нормально ли выглядит схема? Не стоит ли заместо шести ожидающих нитей с разными номерами порта на компьютере преподавателя обойтись одной ибо все равно одновременно толкнувшихся учеников можно поочереди обработать? Есть ли какие-то ещё "неправильности" в моём изложении? Может вообще есть способ проще? Заранее спасибо за помощь. Последний раз редактировалось _Инженер_; 17.09.2009 в 16:32. |
17.09.2009, 16:19 | #2 |
Участник клуба
Регистрация: 28.03.2007
Сообщений: 1,814
|
Не знаю как там на счёт нитей, можно чтобы у препода была серверная часть программы (комонент TServerSocket) а у учеников клиентская часть (компонент TClientSocket). Настраиваем сервер и клиент на один порт. Клиенты конектятся к серверу и ожидают запроса. у TServerSocket есть св-во Connections[]. Выбирая i-тое соединение мы посылаем задание определённому ученику. Т. е. что то вроде чата
|
17.09.2009, 16:32 | #3 | |
Пользователь
Регистрация: 19.06.2008
Сообщений: 32
|
Цитата:
|
|
17.09.2009, 16:44 | #4 |
Участник клуба
Регистрация: 28.03.2007
Сообщений: 1,814
|
Ну это на ваше усмотрение. У этих компонентов есть св-во Disconnect, Connect в котором можно что то сделать в случае потери (установки) связи.
Последний раз редактировалось SERG1980; 17.09.2009 в 16:50. |
17.09.2009, 17:01 | #5 |
Пользователь
Регистрация: 19.06.2008
Сообщений: 32
|
Вообще я пока игрался только со "встроенными" в winsock функциями, не пользуясь вышеуказанными компонентами. Где-то видел сообщение об их глючности.
|
18.09.2009, 08:52 | #6 |
Участник клуба
Регистрация: 28.03.2007
Сообщений: 1,814
|
А вы попробуйте сначала, а потом можно и о глюках говорить, вроде работал с ними всё нормально было (хотя может просто повезло)
|
18.09.2009, 09:24 | #7 |
Пользователь
Регистрация: 19.06.2008
Сообщений: 32
|
Что ж, спасибо за советы. Буду пробовать.
|
02.10.2009, 17:11 | #8 |
Пользователь
Регистрация: 19.06.2008
Сообщений: 32
|
Каков максимальный размер переменной для передачи с помощью сокетов?
С общей организацией вроде как разобрался. Но по мере продвижения возникла новая проблема, которую никак не удаётся сдвинуть.
При передаче данных с помощью сокетов происходит следующее: если передаваемая переменная совсем умеренных размеров, например string : = 'ААА!!! Мы все умрёёём!'; то, передача происходит без проблем, Если беру рекорд, имеющий в своём составе 2 поля, представляющие собой массивы из двух элементов, то тоже всё работает. Если же беру, скажем, двумерный массив строк три на тридцать, то функция recv отрабатывает, не возвращая ошибку, но выдаёт пустую переменную, куда я перекладываю входной буфер. Куда теряются данные? Во всех мануалах написано, что размер переменной не имеет значения. ------------------------- выяснилось, что вообще массивы строк передавать не хочет - даже из трёх элементов Последний раз редактировалось _Инженер_; 02.10.2009 в 17:56. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Передача файла по сокетам | bigmak | Помощь студентам | 1 | 24.03.2009 12:50 |
Вопрос по сокетам | Garacio_cain | Работа с сетью в Delphi | 17 | 29.12.2008 17:22 |
Подскажите пожалуйста | Dimanw92 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 24.09.2008 22:51 |
прередача по сокетам | geronime | Работа с сетью в Delphi | 0 | 22.12.2007 11:27 |