-1
利用可能な場合にのみデータを受信したい。 ArduinoのSerial.available()
のように。利用可能であれば、pythonソケットでデータを受信する
if there is data:
receive and print
else:
print 'No data'
実際には、データを受信するだけでプログラムを停止させたくありません。
利用可能な場合にのみデータを受信したい。 ArduinoのSerial.available()
のように。利用可能であれば、pythonソケットでデータを受信する
if there is data:
receive and print
else:
print 'No data'
実際には、データを受信するだけでプログラムを停止させたくありません。
select.select
ソケットにデータがあるかどうかをポーリングするために使用できます。ここでは簡単な例です:
import socket
import select
s = socket.socket()
s.bind(('',8000))
s.listen(1)
readable = [s] # list of readable sockets. s is readable if a client is waiting.
i = 0
while True:
# r will be a list of sockets with readable data
r,w,e = select.select(readable,[],[],0)
for rs in r: # iterate through readable sockets
if rs is s: # is it the server
c,a = s.accept()
print('\r{}:'.format(a),'connected')
readable.append(c) # add the client
else:
# read from a client
data = rs.recv(1024)
if not data:
print('\r{}:'.format(rs.getpeername()),'disconnected')
readable.remove(rs)
rs.close()
else:
print('\r{}:'.format(rs.getpeername()),data)
# a simple spinner to show activity
i += 1
print('/-\|'[i%4]+'\r',end='',flush=True)
2つのクライアントが接続されて、何かを送信し、切断例:あなたが例外を処理する必要があり、その後
('127.0.0.1', 2983): connected
('127.0.0.1', 2983): b'hello'
('127.0.0.1', 2985): connected
('127.0.0.1', 2985): b'there'
('127.0.0.1', 2983): disconnected
('127.0.0.1', 2985): disconnected
<spinner activity here>
あなたはまた、ソケット上.setblocking(0)
を呼び出すことができますが、ときに.accept()
かソケットの.recv()
および受信への接続準備又は全くデータは、例えば、存在しない:
try:
data = s.recv(1024)
print(data)
except BlockingIOError:
print('no data')
は、非ブロッキングソケットを使用するかを設定しますソケットのタイムアウト –