【发布时间】:2020-12-17 10:23:53
【问题描述】:
我会尽力解释一切。
描述: 开发一个用 kotlin 编写的充当服务器端的 android 应用程序和充当客户端的 Python 程序都在同一台计算机上运行,并尝试相互发送和接收消息。我正在使用文本视图来显示我从 PC(python) 接收到的消息。
问题: 每当我尝试运行客户端程序时,如果我使用 client_socket.connect(('10.0.2.2',5000)) 或它给了我错误:61 连接被拒绝 如果我尝试使用 ip 地址 client_socket.connect(('127.0.0.1',5000))
连接它我尝试过的内容:我已经编写了下面编写的两个程序,但不知道我使用的 IP 地址是错误的还是其他的。而且我使用了 IP模拟器 10.0.2.15 的地址,但没有任何效果。
服务器
package com.example.soundsource
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.widget.Button
import android.widget.TextView
import java.net.ServerSocket
import java.net.Socket
import java.io.*
class MainActivity : AppCompatActivity() {
private lateinit var textView:TextView
companion object{
const val COMMUNICATIONPORT = 6000
private lateinit var serversocket:ServerSocket
private lateinit var serverThread:Thread
private lateinit var updateConversationHandler:Handler
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val sendButton:Button = findViewById(R.id.send_button)
val showLocation = findViewById(R.id.show_location) as? Button
showLocation?.setOnClickListener {
val intent = Intent(this,SoundLocation::class.java)
startActivity(intent)
}
textView = findViewById(R.id.text_view)
sendButton.setOnClickListener{
serverThread = Thread(ServerThread())
serverThread.start()
}
}
class ServerThread:Runnable{
override fun run() {
var socket: Socket
try {
serversocket = ServerSocket(COMMUNICATIONPORT)
} catch (e:IOException) {
e.printStackTrace()
}
while (!Thread.currentThread().isInterrupted) {
try {
socket = serversocket.accept()
val commThread = CommunicationThread(socket)
Thread(commThread).start()
} catch (e: IOException) {
e.printStackTrace()
}
}
}
}
class CommunicationThread(private val clientSocket: Socket) : Runnable {
private var input: BufferedReader? = null
private var output:PrintWriter? = null
init {
try {
this.input = BufferedReader(InputStreamReader(this.clientSocket.getInputStream()))
this.output = PrintWriter(clientSocket.getOutputStream())
} catch (e: IOException) {
e.printStackTrace()
}
}
override fun run() {
while (!Thread.currentThread().isInterrupted) {
try {
output!!.write("Thanks for connecting with me.....")
val read = input!!.readLine()
updateConversationHandler.post(MainActivity().UpdateUIThread(read))
} catch (e: IOException) {
e.printStackTrace()
}
}
}
}
internal inner class UpdateUIThread(private val msg: String) : Runnable {
override fun run() {
val message = "Client Says: $msg \n"
textView.text = message
}
}
}
客户
import socket
def main():
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("creating client socket.....")
client_socket.connect(('10.0.2.2', 6000))
print("successfully connected.....")
while True:
data = client_socket.recv(1024).decode()
print("server sent something.....\n", data)
print("you are about to.....")
client_socket.send("hey server....".encode())
main()
【问题讨论】:
-
你已经问过了。为什么不提前删除? stackoverflow.com/questions/63617435/…
标签: python android sockets server client