ALGOBIT > 離散的な気まぐれ

2011/05/06

TCPサーバ ruby と python

Filed under: 離散的な気まぐれ — タグ: , , , — Kohyama @ 11:01

自分用まとめです.
各言語の 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:

コメントをどうぞ

*

Copyright © 2010 Yoshinori Kohyama All Rights Reserved.