如何通过 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 服务器。