Python とネットワーク プログラミングの知識があまりありません。現在、ユーザーから送信されたテキスト メッセージを受信し、Google 検索 API から情報を取得し、結果をテキスト メッセージでユーザーに返すことができる単純なアプリケーションを実装しようとしています。このアプリケーションは、ユーザーのメッセージをリッスンし続け、すぐに返信します。
ユーザーから送信されたテキストショートメッセージを取得するにはどうすればよいですか? これは、中国のモバイル サプライヤーが提供する fetion という名前のプログラムです。クライアント側の機能は、インスタント コミュニケーション ツールのように、モバイルを使用して SMS を送受信している他のユーザーとの間でメッセージを送受信できます。
fetion プログラムをシミュレートするオープン ソースの python プログラムを使用しています。基本的に、この python プログラムを使用して、SMS 経由で携帯電話を使用している他のユーザーと通信できます。
私のコア プログラムは Java に基づいているため、この Python プログラムを Java 環境に取り込む必要があります。私はjythonを使用していますが、Javaコードのいくつかの行でユーザーにメッセージを送信できるようになりました.
しかし、本当の問題は、SMS を介してユーザーから受信するプロセスです。Python コードでは、新しいスレッドが作成され、ユーザーを継続的にリッスンします。Python では問題ないはずですが、Jython で同様のプロセスを実行すると、次の例外が発生します。
Exception in thread Thread:Traceback (most recent call last):
File "D:\jython2.5.1\Lib\threading.py", line 178, in _Thread__bootstrap
self.run()
File "<iostream>", line 1389, in run
File "<iostream>", line 1207, in receive
File "<iostream>", line 1207, in receive
File "<iostream>", line 150, in recv
File "D:\jython2.5.1\Lib\select.py", line 223, in native_select
pobj.register(fd, POLLIN)
File "D:\jython2.5.1\Lib\select.py", line 104, in register
raise _map_exception(jlx)
error: (20000, 'socket must be in non-blocking mode')
Python コードの 150 行目は次のとおりです。
def recv(self,timeout=False):
if self.login_type == "HTTP":
time.sleep(10)
return self.get_offline_msg()
pass
else:
if timeout:
infd,outfd,errfd = select([self.__sock,],[],[],timeout)//<---line 150 here
else:
infd,outfd,errfd = select([self.__sock,],[],[])
if len(infd) != 0:
ret = self.__tcp_recv()
num = len(ret)
d_print(('num',),locals())
if num == 0:
return ret
if num == 1:
return ret[0]
for r in ret:
self.queue.put(r)
d_print(('r',),locals())
if not self.queue.empty():
return self.queue.get()
else:
return "TimeOut"
私はPython、特にソケット部分に精通しておらず、Jythonの使用も初めてなので、本当にあなたの助けが必要か、アドバイスや説明だけが必要です.
どうもありがとうございました!