次のコードを使用して、Python (Python での最初のプログラム) でソケットサーバーをセットアップしました。
class setupServer(threading.Thread):
def __init__(self, host, port):
threading.Thread.__init__(self)
self.host = host
self.port = port
def now(self):
d = datetime.datetime.now()
return d.strftime("%d/%m/%y %H:%M:%S")
def run(self):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((self.host, self.port))
server.setblocking(0)
server.listen(3)
inputs = [server]
print("Server started!")
while inputs:
readable, writeable, error = select.select(inputs,[],[])
for s in readable:
if s is server:
conn, addr = s.accept()
print('contact', addr, 'on', self.now())
conn.setblocking(0)
inputs.append(conn)
else:
data = s.recv(4096)
if data:
print("Received msg: ", data.decode())
else:
print('close')
inputs.remove(s)
s.close()
(受信したデータは印刷以外の処理が終わっていないので注意してください)
クライアントは AIR ソケットを使用して接続しています。Unix ベースのシステムでは、すべて正常に動作しているようです。Android フォンと OSX システムからのデータ送信をテストしました。
ただし、Windows クライアントでは接続できますが、AIR がサーバーに接続した直後に何かを受信するだけです (テストメッセージを送信します)。その後送信されたものはすべて、ソケット サーバーに到達しません。
socket.settimeout 機能も使用してみましたが、まったく同じ問題が発生します。AIR を Flash に変更しても、バージョンが異なっても違いはありません。しかし、すべてが OSX と Android で動作するという事実を考えると、問題は Windows にあると思います。
誰でもこれを解決する方法を知っていますか? (AIR クライアント PC で Windows 8 を使用しています。必要に応じて AIR コードを投稿することもできますが、これは非常に基本的なものであり、writeUTFBytes() を使用してメッセージを送信します)