ゲ。TwistdはコマンドであってやっぱTwistedでいいということに気がつきタイトル変更しました。
macでとりあえず簡単にソケットサーバーやるならtwistdが楽
コードは下にペーストした通りでsocketserver.pyとか何でも好きな名前にして
あとはターミナルで
cd でそのファイルを置いたディレクトリに行って
sudo python twistd -y socketserver.py
と起動する。そして
telnet localhost 10000
で接続して(なんならもう1つtelnetで同じように接続して)
例えば
konnitiwa
と入力してリターンすると
gobusata desu
と帰ってくる
print文で出力した内容は
tail -f twistd.log
で読めます。snow leopardでは起動時にwarningが出るけど、直し方はしらない。とにかく動く。
以前twistd本の気持ちわるさについて書いたのはスペルミスしていたことに今気がつきました。
#!/usr/bin/python
# coding: utf-8
from twisted.protocols import basic
#import os
#import sys
#import hashlib
port = 10000
class MyChat(basic.LineReceiver):
def connectionMade(self):
self.channels = []
self.factory.clients.append(self)
print "new a client total:", len(self.factory.clients)
def connectionLost(self, reason):
self.factory.clients.remove(self)
print "lost a client total:", len(self.factory.clients)
def lineReceived(self, line):
line = line.rstrip()
print "received ", line
if line == "konnitiwa":
self.broadcast("gobusata desu")
elif line == "genki desuka":
self.broadcast("genki desu")
def broadcast(self, message):
for client in self.factory.clients:
print "client ", client
try:
client.message(message)
except:
print "cant send"
def message(self, message):
self.transport.write(message + '\n')
from twisted.internet import protocol
from twisted.application import service, internet
factory = protocol.ServerFactory()
factory.protocol = MyChat
factory.clients = []
application = service.Application("chatserver")
internet.TCPServer(port, factory).setServiceParent(application)
コメント