私は、TCPプロトコルでポートからデータを受信できるコードを作成しました。私はESP8266から15分ごとにデータを受信し、ESPはdeepSleepモードになります。どのようにそれを連続的に動作させるために変更するには? whileループで新しい接続を作成したいのですが、うまくいきません。TCPポートへの連続リッスン
私のコード
import sys
import socket
TCP_IP = '192.168.42.1'
TCP_PORT = 8888
BUFFER_SIZE = 1024
param = []
i=0
#s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s.bind((TCP_IP,TCP_PORT))
#s.listen(1)
#print 'Listening for client...'
#conn, addr = s.accept()
#print 'Connection address:', addr
while 1:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP,TCP_PORT))
s.listen(1)
print 'Listening for client...'
conn, addr = s.accept()
print 'Connection address:', addr
data = conn.recv(BUFFER_SIZE)
if data == ";" :
conn.close()
print "Received all the data"
i=0
for x in param:
print x
#break
elif data:
print "received data: ", data
param.insert(i,data)
i+=1
#print "End of transmission"
EDIT:修正後
私のコード。
import sys
import socket
TCP_IP = '192.168.42.1'
TCP_PORT = 8888
BUFFER_SIZE = 1024
param = []
i=0
#s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s.bind((TCP_IP,TCP_PORT))
#s.listen(1)
#print 'Listening for client...'
#conn, addr = s.accept()
#print 'Connection address:', addr
while 1:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP,TCP_PORT))
s.listen(1)
while 1:
print 'Listening for client...'
conn, addr = s.accept()
print 'Connection address:', addr
data = conn.recv(BUFFER_SIZE)
if data == ";" :
conn.close()
print "Received all the data"
i=0
for x in param:
print x
#break
elif data:
print "received data: ", data
param.insert(i,data)
i+=1
#print "End of transmission"
s.close()
私は2番目のwhileループを作成しました。私は今も継続して聞くことができますが、私はESPからパケットを1つだけ受信します(ESPは9パケットを送信します)。その問題を解決するには?あなたが継続的にあなたのリモートエンドからの接続やデータをリッスンする場合は、selectを使用してこれを達成することができます
TCPソケットのタイムアウトを15分以上に設定できます。 –
あなたは 'socket.close()'と 'time.sleep(15 * 60)'を追加してwhileループを終了して15分後に新しいソケット接続を作成することができます –