Oh, thank you very much. I'll try it later. 在 2019年1月12日星期六 UTC+8下午11:55:08,Zhonghua Zhu写道: > > I am writing a tcp server program. > Server uses non-blocking reading and client uses write-bytes, then server > never read any bytes and write-bytes returns the right value. > But when I change client's write-bytes to write-bytes-avail, server > receives bytes immediately. > > I don't know why this happens. > > It seems like (byte-ready? in) always returns false when client using > write-bytes. > > Here is the server and client program. > > Server Program > > #lang racket > > (require racket/tcp) > > (define (prn-ln . args) > (displayln (apply format args))) > > (define server-listener #f) > (define listen-port 8000) > > (set! server-listener (tcp-listen listen-port)) > > (define in #f) > (define out #f) > (define bytes (make-bytes 4)) > (define len 0) > > (define (read-sock) > (when (and in > (byte-ready? in)) > (set! len (read-bytes-avail!* bytes in 0 4)) > (prn-ln "read len ~a" len) > (prn-ln "read int ~a" (integer-bytes->integer bytes #f #f 0 4)))) > > (define (game-loop) > (if (not in) > (when (tcp-accept-ready? server-listener) > (set!-values (in out) (tcp-accept server-listener)) > (displayln "a new socket come in")) > (read-sock)) > (sleep 1) > (game-loop)) > > (game-loop) > > Client Program > > #lang racket > > (require racket/tcp) > > (define-values (in out) (tcp-connect "127.0.0.1" 8000)) > > (define bytes (make-bytes 4)) > (define number 10) > (integer->integer-bytes number 4 #f #f bytes 0) > > (define (loop) > (define ret (write-bytes bytes out 0 4)) > (displayln (format "ret ~a" ret)) > (sleep 1) > (loop)) > > (loop) >
-- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.