Squeak で Socket通信(正)

umejava さんがコメントで教えてくれました(ありがとうございます)が、昨日のエントリーで #waitForAcceptFor: がうまく使えず Squeak 版の欠点(?)とか書いたのは、単に使い方我が悪かっただけでした。
しかもOldSocket の examples カテゴリ に殆どそのままのサンプルがあったという体たらく。いろいろ解らない/見てないで適当にやっているの丸出しです。恥ずかしい限りなので、この週末は穴を掘って入ることにします。ざくざく。

というわけで、サーバー側を Squeak の Workspace、クライアント側を Python (Idle)で、前回のエントリーを焼き直しです。


まずは接続

"Squeak"
server _ Socket newTCP.
server listenOn: 7878 backlogSize: 4.

sock _ server waitForAcceptFor: Socket standardTimeout.
Transcript
	cr;
	show: DateAndTime now;
	show: '  ';
	show: sock.
>>> #Python(Idle)
>>> import socket
>>>
>>> sock = socket.socket( socket.AF_INET,
>>>                      socket.SOCK_STREAM )
>>> sock.connect(('localhost', 7878))

(Transcript の出力)

2007-08-24T17:30:58+00:00  a Socket[connected]


次にサーバ側からデータ送信です。

"Squeak"
sock sendData: 'Welcome to Squeak'.
>>> #Python(Idle)
>>> sock.recv(100)
'Welcome to Squeak'

今度はクライアント側からサーバへデータ送信。

>>> #Python(Idle)
>>> sock.send( "Hello, I'm Python" )
"Squeak"
Transcript cr; show: sock receiveData.

(Transcript の出力)

Hello, I'm Python

で、ソケットクローズ。

"Squeak"
sock closeAndDestroy.
server closeAndDestroy.
>>> #Python(Idle)
>>> sock.close()

追記(2007-09-07):

pythonでsocket入門: 思い立ったが吉日生活 さんと同じような、flashの紙芝居アニメも用意しました。Winkって初めて使ってみましたが、イイですね。

SqueakでSocket(flash)