Socketを使用したエコーサーバーをマルチスレッドにできない
Pythonです。
Socketを使用して、受信したテキストをそのまま返すエコーサーバーをつくりました。
沢山の機器で同時接続させたいので、スレッドを使用したのですが、挙動がおかしいです。
Pythonが初心者ということもあり、様々なサイトを見るも解決できず...
最後にstack overflowさんにたどり着いた次第です。
環境は
- Linux (PuppyLinux 571JP)
- Python 2.7.3
です。
これがエコーサーバーのソースです。
#coding: UTF-8
import socket
import threading
class TestThread(threading.Thread):
def setSocket(self,c):
self.c = c
def __init__(self):
threading.Thread.__init__(self)
def run(self):
try:
while True:
self.text = c.recv(1024)
print self.text
c.send(self.text)
except:
print "error"
c.close()
if __name__ == "__main__":
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("localhost",8000))
s.listen(5)
while True:
print "wait..."
c,address = s.accept()
t1 = TestThread()
print "Connected! ",address
t1.setSocket(c)
t1.start()
これを実行し、telnetで接続すると
- telnet_A 接続
- telnet_B 接続
- telnet_A 発言 >>こんにちは
- Server 受信 << こんにちは
- telnet_B 受信 <<こんにちは ←なぜかtelnet_Bに送信される
- telnet_A 無反応 ←telnet_Aは何も受信しない
- telnet_A 発言 >>おはよう
Server,telnet_A,telnet_B 無反応
以降telnet_Aは切断していないが、発言しても送信されないtelnet_B 発言 >>こんばんわ
- Server 受信 << こんばんわ
- telnet_B 受信 << こんばんわ
・・・以降は会話できる。 telnet_B 切断 telnet終了
Server 改行改行改行・・・・・ ←無限に改行を繰り返す
こんな感じです。
どこが原因なのでしょうか?