问题
BufferedReader.readline
not works, I am trying to connect Android devices to the Server, Server side programming language is Python.
server.py
LENGTH = 1024
PORT = 1234
time.sleep(1)
s = socket.socket()
host = socket.gethostname()
ip = socket.gethostbyname(host)
s.bind((host, PORT))
# name = input(str("Enter your name: "))
name = "Admin"
s.listen(1)
print("\nWaiting for incoming connections...\n")
conn, addr = s.accept()
print("Received connection from ", addr[0], "(", addr[1], ")\n")
s_name = conn.recv(LENGTH)
s_name = s_name.decode()
print(s_name, "has connected to the chat room\nEnter [e] to exit chat room\n")
conn.send(name.encode())
def send():
print("Start messaging ...\n")
while 1:
message = input()
if message == "[e]":
message = "Left chat room!"
conn.send(message.encode())
print("\n")
break
conn.send(message.encode())
def receive():
while 1:
message = conn.recv(LENGTH)
message = message.decode()
print(s_name, ":", message)
thread_receive = threading.Thread(target=receive)
thread_receive.start()
thread_send = threading.Thread(target=send)
thread_send.start()
and it works with Python code as a client, but not works with Android Kotlin:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
editTextMessage = findViewById(R.id.editTextMessage)
connect()
buttonSubmit.setOnClickListener {
Log.w(TAG, "Button Submit Clicked ...")
send()
}
}
private lateinit var editTextMessage: EditText
private val IP = "192.168.100.08"
private val PORT = 5050 // 1234
private lateinit var printWriter: PrintWriter
private fun send() {
val threadSend = Thread {
try {
val sendMessage = editTextMessage.text.toString()
printWriter.print(sendMessage.length)
printWriter.flush()
printWriter.print(sendMessage)
printWriter.flush()
clearMessagebox()
} catch (eIO: IOException) {
Log.e(TAG, "IOException, ${eIO.message}", eIO)
} catch (e: Exception) {
Log.e(TAG, "IOException, ${e.message}", e)
}
}
threadSend.start()
}
private fun receive(socket: Socket) {
val threadSend = Thread {
try {
val inputStream = InputStreamReader(
socket.getInputStream()
)
val bufferedReader = BufferedReader(
inputStream
)
var receiveMessage: String? = null
while (true) {
val sendMessage = bufferedReader.readLine()
if (bufferedReader.readLine()
.also({ receiveMessage = it }) != null
) //receive from server
{
Log.w(TAG, "Receive Message: ${receiveMessage.toString()}")
Log.w(TAG, "Send Message: $sendMessage")
}
}
} catch (eIO: IOException) {
Log.e(TAG, "IOException, ${eIO.message}", eIO)
} catch (e: Exception) {
Log.e(TAG, "IOException, ${e.message}", e)
}
}
threadSend.start()
}
private fun clearMessagebox() {
if (Looper.getMainLooper().thread == Thread.currentThread()) {
editTextMessage.text.clear()
} else {
runOnUiThread { editTextMessage.text.clear() }
}
}
private fun connect() {
val threadConnect = Thread {
try {
Log.w(TAG, "Connecting ...")
val socket = Socket(IP, PORT)
socket.receiveBufferSize = 1024
printWriter = PrintWriter(socket.getOutputStream())
printWriter.print("HosseinKurd".length)
printWriter.flush()
printWriter.print("HosseinKurd")
printWriter.flush()
Log.w(TAG, "Connected.")
receive(socket)
} catch (eIO: IOException) {
Log.e(TAG, "IOException, ${eIO.message}", eIO)
} catch (e: Exception) {
Log.e(TAG, "IOException, ${e.message}", e)
}
}
threadConnect.start()
}
来源:https://stackoverflow.com/questions/63127834/connect-android-device-to-python-project-via-socket