如何通过 TCP/IP 通过本地 Wi-Fi (Android) 进行通信
How to communicate via TCP/IP through local Wi-Fi (Android)
我正在尝试让 TCP/IP 客户端在我的 Android 平板电脑上与我笔记本电脑上的 TCP/IP 服务器通信。
平板需要使用本地Wi-Fi
设置:
在 Android Studio 中,在我的 PC 上,我有一个简单的 TCP/IP 服务器 运行ning 在我的 PC 上。
代码如下:
package com.example.tcp_server_01
import java.net.ServerSocket
fun main()
{
val server = ServerSocket(9999)
while (true)
{
val socket = server.accept()
println(String(socket.getInputStream().readBytes()))
socket.close()
}
}
在另一个 Android Studio window 中,我有一个简单的 TCP/IP 客户端。
代码如下:
package com.example.tcp_client_01
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import java.net.Socket
import kotlin.concurrent.thread
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val dataTextField = findViewById<EditText>(R.id.editText_data)
val sendButton = findViewById<Button>(R.id.button_send)
sendButton.setOnClickListener {
val text = dataTextField.text.toString()
thread {
//val socket = Socket("xxx.xxxx.xxx.xxx", 9999) // PC's IP address, as seen from outside my house
//val socket = Socket("127.0.0.1", 9999) // local host (within emulator)
//val socket = Socket("10.0.2.2", 9999) // This is bridged to my local machine
val socket = Socket("xxx.xxx.xxx.xxxx", 9999) // Wi-Fi IPv4 address (from ipconfig cmd)
socket.getOutputStream().write(text.toByteArray())
socket.close()
}
}
}
}
目前有效:
运行 Android Studio 模拟器中的客户端可以正常工作。
客户端使用 IP 地址 10.0.2.2 连接到服务器,因为服务器和客户端都在同一台机器上 运行ning(我在某处读到 10.0.2.2 从模拟器桥接到本地机器) .
因此,在客户端应用程序中,我可以在 EditText 字段中输入文本,按下按钮时,数据将发送到服务器并由服务器成功接收。
目前一切顺利。
还没有解决的问题:
现在我想 运行 我的 Galaxy 平板电脑上的客户端应用程序,而不是模拟器。
为此,我需要使用 Wi-Fi 进行通信,因此我无法再使用 10.0.2.2 IP 地址。
我的客户的 AndroidManifest.xml 包括以下权限:
是否只需更改 IP 地址即可通过 Wi-Fi 运行?
我试过各种IP地址:
我用谷歌搜索“我的 IP 地址是什么”并使用了它 - 没有成功。
我使用 ipconfig 获取 Wi-Fi IP 地址,它以以下格式提供给我信息:
Wireless LAN adapter Wi-Fi:
Connection-sepcific DNS Suffix: xxxx:xxxx:xxxx:xxxx:xxxx%yy
Link-local IPv6 Address: xxx.xxx.xxx.xxx
IPv4 Address: xxx.xxx.xxx.xxx
Subnet Mask: xxx.xxx.xxx.xxx
Default Gateway: xxx.xxx.xxx.xxx
我使用了 IPv4 地址 - 没有成功。
问题:
谁能给我指出正确的方向吗?
我猜还有一些步骤可以通过 TCP/IP 通过 Wi-Fi 从 Android 平板电脑与我的电脑进行通信。
提前致谢
加勒特
更新:
我自己解决了这个问题。
我在我的 Android 设备上下载了 PingTools,发现我无法在同一网络上 ping 我的 PC(使用 IPv4 地址:192.168.1.76)。
PC 和 Android 设备都在同一个 Wi-Fi 网络上。
然后我将 Wi-Fi 设置的网络配置文件类型从 Public 更改为 Private。
然后我的 Android 设备可以 ping 我的电脑 :)
当然,然后,我的 TCP 客户端能够成功地将数据发送到我的 TCP 服务器。
我正在尝试让 TCP/IP 客户端在我的 Android 平板电脑上与我笔记本电脑上的 TCP/IP 服务器通信。 平板需要使用本地Wi-Fi
设置:
在 Android Studio 中,在我的 PC 上,我有一个简单的 TCP/IP 服务器 运行ning 在我的 PC 上。
代码如下:
package com.example.tcp_server_01
import java.net.ServerSocket
fun main()
{
val server = ServerSocket(9999)
while (true)
{
val socket = server.accept()
println(String(socket.getInputStream().readBytes()))
socket.close()
}
}
在另一个 Android Studio window 中,我有一个简单的 TCP/IP 客户端。
代码如下:
package com.example.tcp_client_01
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import java.net.Socket
import kotlin.concurrent.thread
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val dataTextField = findViewById<EditText>(R.id.editText_data)
val sendButton = findViewById<Button>(R.id.button_send)
sendButton.setOnClickListener {
val text = dataTextField.text.toString()
thread {
//val socket = Socket("xxx.xxxx.xxx.xxx", 9999) // PC's IP address, as seen from outside my house
//val socket = Socket("127.0.0.1", 9999) // local host (within emulator)
//val socket = Socket("10.0.2.2", 9999) // This is bridged to my local machine
val socket = Socket("xxx.xxx.xxx.xxxx", 9999) // Wi-Fi IPv4 address (from ipconfig cmd)
socket.getOutputStream().write(text.toByteArray())
socket.close()
}
}
}
}
目前有效:
运行 Android Studio 模拟器中的客户端可以正常工作。 客户端使用 IP 地址 10.0.2.2 连接到服务器,因为服务器和客户端都在同一台机器上 运行ning(我在某处读到 10.0.2.2 从模拟器桥接到本地机器) . 因此,在客户端应用程序中,我可以在 EditText 字段中输入文本,按下按钮时,数据将发送到服务器并由服务器成功接收。 目前一切顺利。
还没有解决的问题:
现在我想 运行 我的 Galaxy 平板电脑上的客户端应用程序,而不是模拟器。
为此,我需要使用 Wi-Fi 进行通信,因此我无法再使用 10.0.2.2 IP 地址。
我的客户的 AndroidManifest.xml 包括以下权限:
是否只需更改 IP 地址即可通过 Wi-Fi 运行?
我试过各种IP地址:
我用谷歌搜索“我的 IP 地址是什么”并使用了它 - 没有成功。
我使用 ipconfig 获取 Wi-Fi IP 地址,它以以下格式提供给我信息:
Wireless LAN adapter Wi-Fi:
Connection-sepcific DNS Suffix: xxxx:xxxx:xxxx:xxxx:xxxx%yy
Link-local IPv6 Address: xxx.xxx.xxx.xxx
IPv4 Address: xxx.xxx.xxx.xxx
Subnet Mask: xxx.xxx.xxx.xxx
Default Gateway: xxx.xxx.xxx.xxx
我使用了 IPv4 地址 - 没有成功。
问题:
谁能给我指出正确的方向吗?
我猜还有一些步骤可以通过 TCP/IP 通过 Wi-Fi 从 Android 平板电脑与我的电脑进行通信。
提前致谢
加勒特
更新:
我自己解决了这个问题。
我在我的 Android 设备上下载了 PingTools,发现我无法在同一网络上 ping 我的 PC(使用 IPv4 地址:192.168.1.76)。
PC 和 Android 设备都在同一个 Wi-Fi 网络上。
然后我将 Wi-Fi 设置的网络配置文件类型从 Public 更改为 Private。
然后我的 Android 设备可以 ping 我的电脑 :)
当然,然后,我的 TCP 客户端能够成功地将数据发送到我的 TCP 服务器。