私は以下のプロジェクトに取り組んでいます。TCP IPクライアント(WPF GUI)とTCP IPサーバー(Python)を作成しました。この問題の焦点はサーバーにあります。現時点では、クライアントからサーバーにメッセージを送信することができ、サーバーはクライアントにメッセージを返します。TCP IPソケットとマルチスレッド
プロセスと私はarchieveたい:
クライアント:サーバーがメッセージを受信:
サーバーを(ボタン ステータスが変化したときなど)、サーバーにeventbasedメッセージを送ります サーバーはクライアントにデータを継続的に送信する必要があります(たとえば、 現在のセンサー値をクライアントに1秒間に送信します)。サーバーは もクライアントからの新しいメッセージに反応し、 その他のものを行う必要があります。
問題:
- paralelleプロセス:受信メッセージとカント 何か(データ= conn.recv(1024))を行うためのサーバーが待機。だから私は 複数のメッセージをクライアントに送り返すことができません。クライアントへ
- メインループの複数のデータを送信します
- は、クライアント
- からのデータを受信:
私の最初のアイデアは、二つのスレッドを使用していた他のものを行う、スレッドを開始し
私の質問:正しい方法でスレッドを使用していますか?私はTCP IPとスレッドの使用経験はあまりありません。ご協力ありがとうございました。
サーバーの私の現在のコード:
from threading import Thread
import socket
data =''
HOST ='192.168.0.108' # Server IP or Hostname
PORT = 12345 # Pick an open Port (1000+ recommended), must match the client sport
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
def ReceiveAndSendData():
#managing error exception
try:
s.bind((HOST, PORT))
except socket.error:
print 'Bind failed '
print 'Wait for connection'
s.listen(5)
(conn, addr) = s.accept()
print 'Connected'
# awaiting for message
while True:
print'start'
try:
print 'awaiting data from GUI'
if not data: break
data = conn.recv(1024)
print 'Received data: ' + data
reply = 'Received data'
conn.send(reply)
except socket.error:
print 'Connection lost'
print 'Wait for connection'
s.listen(5)
(conn, addr) = s.accept()
print 'Connected'
conn.close() # Close connections
def Main():
t1 = Thread(target=ReceiveAndSendData)
t1.start()
print 'DoSomething'
if __name__ == '__main__':
Main()
有用な回答ありがとうございます。今度はサーバーがasync.hを実行します。私はこのコードを使用しました:https://pymotw.com/2/asyncore/#servers –