自分用まとめです.
各言語の TCPサーバ雛形としてのエコーサーバ.
クライアントから来たメッセージが変数で見える最小コードシリーズ.
ruby 版.
ポートを変えてる以外は 本家のリファレンス そのままですが.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | require 'socket' gs = TCPServer.open( 1111 ) addr = gs.addr addr.shift while true Thread .start(gs.accept) do |cs| while cs.gets cs.write( $_ ) end cs.close end end |
python 版.
抽象化レイヤーは他にもあるようですが, 複数クライアントを相手にする, クライアントから送られて来たデータが変数で見える, 最小コードという趣旨だと SocketServer.ThreadingTCPServer が一番簡単なようです.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import SocketServer class MyHandler(SocketServer.BaseRequestHandler): def handle( self ): while True : data = self .request.recv( 1024 ) if len (data) = = 0 : self .request.close() return self .request.send(data) if __name__ = = "__main__" : HOST, PORT = "localhost" , 1111 server = SocketServer.ThreadingTCPServer((HOST, PORT), MyHandler) server.serve_forever() |
UNIX系なら, いつも通りそれぞれ「#!/usr/bin/env ruby」, 「#!/usr/bin/env python」を一行目に挿入して chmod +x で直接実行.
Related Posts:
- scheme で TCP エコーサーバ
- Node.js なら TCP エコーサーバが5行!
- clojure から DBMS を利用する
- ハノイとバベルの塔 第三階 – C におけるモジュールの分離
- Swinging Clojure (1)