从Android客户端向Python服务器套接字连续发送数据



我目前正尝试使用套接字将ble数据从应用程序发送到我的电脑。到目前为止,我可以向服务器发送数据,但服务器只接收一个数据,然后停止接收。我怀疑我的客户端代码有问题。如有任何帮助,将不胜感激

我的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 ""
}
}

在bleread特性中,我在这样的线程中调用类:

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("$loghashrnrn")
}.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)

我能够获得发送的第一个数据,但之后没有收到任何数据。任何帮助都将不胜感激,谢谢!

您的服务器代码只接受一个客户端连接。所以,时间到了。

  1. Python在accept等待
  2. Kotlin连接
  3. Python进入while True循环
  4. Kotlin写下,然后关闭套接字

在这一点上,Python代码将不会收到任何进一步的消息,但由于您再也不会调用accept,因此无法接受另一个连接。

您需要使accept处于循环中。处理该连接直到它关闭,然后循环到另一个accept

您可以考虑使用socketserver模块,它可以自动执行其中的一些操作。

最新更新