[Gauche-devel-jp] Re: ソケット 入力待ちで停止してしまう

アーカイブの一覧に戻る

another_face_another_smile****@yahoo***** another_face_another_smile****@yahoo*****
2006年 8月 20日 (日) 13:57:06 JST


赤木です。

書き忘れていた事があったのですが。
(format out "~a" data)
の後に
(flush out)
としても効果はありませんでした。
サーバもクライアントもです。

At Sun, 20 Aug 2006 08:43:12 +0900,
自分 wrote:
> 
> すみません。
> タイトルつけ忘れていました。
> 
> At Sun, 20 Aug 2006 07:47:18 +0900,
> another_face_another_smile****@yahoo***** wrote:
> > 
> > 赤木といいます。
> > 
> > ソケットを使って サーバ - クライアントで
> > 文字列のうけ渡しをしようとしています。
> > 
> > こんな感じです。
> > 
> > クライアント      サーバ
> >   stdin ------------> 
> >         <----------- 無加工で返す
> > 
> > それで以下のようなものを作ったのですが
> > readで停止してしまいます。
> > 改行を入れて送信すれば停止しないことは分かったのですが
> > 原因が分かりません。
> > 
> > ---- クライアント側 -----
> > (use gauche.net)
> > 
> > (let ((sock (make-client-socket 'inet "localhost" 19999)))
> >   (let ((in (socket-input-port sock))
> >         (out (socket-output-port sock :buffering :none)))
> >     (let loop ()
> >       (let ((data (read-line)))
> >         (format out "~a" data)
> >         (format #t "SEND: ~a" data) (newline)
> >         (format #t "RECV: ~a" (read in)) (newline)
> >         (loop)))))  
> > 
> > ---- サーバ側 -----
> > (use gauche.net)
> > 
> > (let* ((serv (make-server-socket 'inet 19999 :reuse-addr? #t))
> >        (sock (socket-accept serv)))
> >   (format #t "accept!\n")
> >   (let ((in (socket-input-port sock))
> >         (out (socket-output-port sock :buffering :none)))
> >     (let loop ()
> >       (let ((data (read in)))
> >         (format #t "R: ~a" data) (newline)
> >         (format out "~a" data))
> >       (loop))))
> > 
> > 
> > 改行を入れたものは以下のようになります。
> > クライアント、サーバ共に (format out ...) の後に (newline) を
> > 入れただけです。
> > 
> > ---- クライアント側 -----
> > (use gauche.net)
> > 
> > (let ((sock (make-client-socket 'inet "localhost" 19999)))
> > 	(let ((in (socket-input-port sock))
> > 				(out (socket-output-port sock :buffering :none)))
> > 		(let loop ()
> > 			(let ((data (read-line)))
> > 				(format out "~a" data) (newline out)
> > 				(format #t "SEND: ~a" data) (newline)
> > 				(format #t "RECV: ~a" (read in)) (newline)
> > 				(loop)))))	
> > 
> > ---- サーバ側 -----
> > (use gauche.net)
> > 
> > (let* ((serv (make-server-socket 'inet 19999 :reuse-addr? #t))
> > 			 (sock (socket-accept serv)))
> >  	(format #t "accept!\n")
> > 	(let ((in (socket-input-port sock))
> > 				(out (socket-output-port sock :buffering :none)))
> > 		(let loop ()
> > 			(let ((data (read in)))
> > 				(format #t "R: ~a" data) (newline)
> > 				(format out "~a" data) (newline out))
> > 			(loop))))
> > 
> > 
> > また、newline でなく format の部分に "~a\n" などと入れても効果は同じでした。
> > その他気になる点としては、
> >  :buffering :none の部分は間違っていないでしょうか?
> >  入力ポートにもなにか設定が必要でしょうか?
> > 
> > それと直接関係ないですが、call-with-client-socket を使った場合に
> > :buffering :none を設定する方法はあるのでしょうか?
> > 
> > 
> > よろしくお願いします。
> > --------------------------------------
> > Let's start Yahoo! Auction  -  Free Campaign Now!
> > http://pr.mail.yahoo.co.jp/auction/
> > _______________________________________________
> > Gauche-devel-jp mailing list
> > Gauch****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp
> --------------------------------------
> Let's start Yahoo! Auction  -  Free Campaign Now!
> http://pr.mail.yahoo.co.jp/auction/
> _______________________________________________
> Gauche-devel-jp mailing list
> Gauch****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp
--------------------------------------
Let's start Yahoo! Auction  -  Free Campaign Now!
http://pr.mail.yahoo.co.jp/auction/



Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る