> 1 <

Автор Сообщение

kreol

Members


Статус

87 сообщений

Где: Ukraine Днепропетровск
Род занятий: студент
Возраст: 26

#5297   2011-12-10 21:14 GMT+3 часа(ов)      
код для сервера

(require racket/tcp)
 
(define (start)
(open_listen 8080))
 
(define (open_listen port)
(define listener (tcp-listen port 5 #t #f))
(define (loop1)
(accept-and-handle listener)
(loop1))
(loop1))
 
(define (accept-and-handle listener)
(define-values (in out) (tcp-accept listener))
(handle in out)
(close-input-port in)
(close-output-port out))
 
(define (handle in out)
(display "hello" out))


для клиента
(require racket/tcp)
 
(define-values (in out) (tcp-connect "127.0.0.1" 8080))
(display (read in))


Сервер выдает одну строку клиент читает ну и выводит
1) Не могу понять как в моем коде, к примеру вывести от сервера к клиенту то, что прислал клиент. В моем представлении надо в последней функции сервера поставить (display (read in) out) а в клиенте (display "что-то" out)
Но так клиент виснет.
2) так же в интерпретаторе сервера не могу выполнять код. Понятно что это из-за "цикла" но как обойти не знаю. читал манул по серверу на рэкете там используется tread но я не могу с этим разобраться ни как работает ни куда надо помещать.

прошу помощи...

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#5298   2011-12-10 22:08 GMT+3 часа(ов)      
Открыл порт 5000 (не 5, как у тебя). В браузере открыл http://localhost:8080, получил hello. Я вот под виндозой, как можно одновременно запустить и клиента и сервер на одном интерпретаторе?
I wish I'd made you angry earlier

kreol

Members


Статус

87 сообщений

Где: Ukraine Днепропетровск
Род занятий: студент
Возраст: 26

#5299   2011-12-10 22:22 GMT+3 часа(ов)      
Открыл порт 5000 (не 5, как у тебя). В браузере открыл http://localhost:8080, получил hello это да. Это работает))

megamanx
Я вот под виндозой, как можно одновременно запустить и клиента и сервер на одном интерпретаторе?

Я тоже там пока). в меню есть возможность открыть в новой вкладке.

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#5300   2011-12-11 00:57 GMT+3 часа(ов)      
1) flush-output
2) потренируйся чуток (все очень просто)

kreol

Members


Статус

87 сообщений

Где: Ukraine Днепропетровск
Род занятий: студент
Возраст: 26

#5303   2011-12-11 06:58 GMT+3 часа(ов)      
misha, прочитал про flush-output но что-то не понял, к чему это и как пользоваться...
после 4 часов проб и ошибок немного понял как работать с потоками...

kreol

Members


Статус

87 сообщений

Где: Ukraine Днепропетровск
Род занятий: студент
Возраст: 26

#5304   2011-12-11 07:16 GMT+3 часа(ов)      
Хотя не совсем понятно.
Вот к примеру код
(define thr 2)
(define (main)
(define a -10000000000)
(define (add1)
(if (= a 0)
a
(begin
(set! a (+ a 1))
(add1))))
(set! thr (thread add1))
(display (read)))


вызываю (main) потом чтобы остановить поток (kill-thread thr)

Вопрос, как мне остановить поток когда a будет равен 0 ?

пробовал таким способом но ничего не помогло.

(define (main)
(define a -10000000000)
(define (add1)
(if (= a 0)
a
(begin
(set! a (+ a 1))
(add1))))
(define thr (thread add1))
(display (read))
(when (= a 0) (kill-thread thr)))

и еще вопрос как избавится в этом коде от (set! ...) ?

Kergan

Members


Статус

300 сообщений

Где: ---
Род занятий:
Возраст:

#5305   2011-12-11 08:50 GMT+3 часа(ов)      

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#5306   2011-12-11 14:14 GMT+3 часа(ов)      
kreol
misha, прочитал про flush-output но что-то не понял, к чему это и как пользоваться...
Данные в потоке буферизируются (исключение составляет разве что вывод на терминал), иначе говоря, отсылаются по частям. Поэтому после передачи данных необходимо вызвать операцию очистки (всех) буферов, чтобы отправить получателю оставшиеся байты. Убейте вашего препода
kreol
Вопрос, как мне остановить поток когда a будет равен 0 ?
А он и так остановится. Поток выполняется до тех пор пока выполняется функция. Советую почитать про потоки и кустодианы.
kreol
и еще вопрос как избавится в этом коде от (set! ...) ?
do, let loop и т.п.

Kergan

Members


Статус

300 сообщений

Где: ---
Род занятий:
Возраст:

#5307   2011-12-11 18:47 GMT+3 часа(ов)      
> do, let loop и т.п.

Лучше for.

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#5308   2011-12-11 18:57 GMT+3 часа(ов)      
>Лучше for.

А еще лучше sleep

kreol

Members


Статус

87 сообщений

Где: Ukraine Днепропетровск
Род занятий: студент
Возраст: 26

#5309   2011-12-11 19:45 GMT+3 часа(ов)      
Цитата
Данные в потоке буферизируются (исключение составляет разве что вывод на терминал), иначе говоря, отсылаются по частям. Поэтому после передачи данных необходимо вызвать операцию очистки (всех) буферов, чтобы отправить получателю оставшиеся байты.

Ясно. Препода нету)
Цитата
Данные в потоке буферизируются (исключение составляет разве что вывод на терминал), иначе говоря, отсылаются по частям. Поэтому после передачи данных необходимо вызвать операцию очистки (всех) буферов, чтобы отправить получателю оставшиеся байты.

ага. я уже убедился в этом...

Kergan

спасибо за ссылку
> 1 <


Онлайн :

0 пользователь(ей), 39 гость(ей) :




Реклама на сайте: