[英]Continuously Send Data from Android Client to Python Server Socket
我目前正在嘗試使用 sockets 將應用程序中的 ble 數據發送到我的 PC。 截至目前,我可以向服務器發送數據,但服務器只接收到一個數據,然后停止接收。 我懷疑我的客戶端代碼有問題。 任何幫助,將不勝感激
我的 SocketClass 代碼:
inner class SocketClass{
fun doInBackground(message: String): String {
try {
socket = Socket(SERVER_IP, SERVERPORT)
val outputStream = OutputStreamWriter(socket?.getOutputStream())
val printwriter = BufferedWriter(outputStream)
printwriter.write(message)
printwriter.flush()
printwriter.close()
socket?.close()
} catch (e: Exception) {
e.printStackTrace()
}catch (e: UnknownHostException){
}
return ""
}
}
在 blereadcharacteristic 中,我在這樣的線程中調用 class:
private fun readDeviceCharacteristic(characteristic: BluetoothGattCharacteristic) {
var hashval:MutableMap<String, String> = mutableMapOf()
var mainThreadList :MutableList<String> = mutableListOf()
var currentTime: String = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").withZone(
ZoneId.of("Asia/Seoul")).format(Instant.now()) // Get current Timestamp
if(idlist.size != 0) {
readval = characteristic.getStringValue(0)
valdata = readval.subSequence(3, readval.length).toString()
idNo = readval.subSequence(0, 2).toString()
parseList.add(readval)
mainThreadList = parseList.toMutableList().distinctBy{it.subSequence(0, 2)} as MutableList<String>
if(mainThreadList.size == maxConnLimit) {
bleDataList = mainThreadList
bleDataList.forEach{
hashval[it.subSequence(0, 2).toString()] = it.subSequence(3, it.length).toString()
}
loghash = hashval.toSortedMap()
txtRead = bleDataList.toString()
parseList.clear()
if(isChecked) {
savehash["Time"]?.add("$sec.$millis")
bleDataList.forEach {
savehash[it.subSequence(0, 2).toString()]?.add(
it.subSequence(
3,
it.length
).toString()
)
}
}else{
time = 0
sec = 0
millis = ""
}
if(isInsert){
Thread{
SocketClass().doInBackground("$loghash\r\n\r\n")
}.start()
}
}
}
isTxtRead = true
bleDataList.clear()
}
我的服務器套接字 python 代碼:
import socket
import sys
host = '19.201.12.12'
port = 30001
address = (host, port)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(address)
server_socket.listen(5)
print("Listening for client . . .")
conn, address = server_socket.accept()
print("Connected to client at ", address)
while True:
output = conn.recv(2048);
if output.strip() == "disconnect":
conn.close()
sys.exit("Received disconnect message. Shutting down.")
elif output:
print("Message received from client:")
print(output)
我能夠發送第一個數據,但之后什么也沒有收到。 任何幫助將不勝感激謝謝!
您的服務器代碼只接受一個客戶端連接。 所以,這是時間安排。
accept
。while True
循環。 到那時,Python 代碼將不會收到任何進一步的信息,但是因為您不再調用accept
,所以您不能接受另一個連接。
您需要循環accept
。 您處理該連接直到它關閉,然后您循環到另一個accept
。
您可能會考慮使用socketserver
模塊,它可以自動執行其中的一些操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.