java - 无法将数据从 C# 发送到 Java (Android) 程序

标签 java c# android sockets tcp

我正在尝试通过 Wifi 通过 TCP 连接将数据从 C#.NET(Windows 应用程序)程序发送到 Java(Android 应用程序)程序,反之亦然。到目前为止,我已经成功地将数据从 Java 发送到 C#,但无法从 C# 发送到 Java。

以下是我用来创建连接和接收数据的Java代码:

ServerSocket serverSocket = null;
DataInputStream socketInputStream;
while (true) {
        try {
            String localIPAddr = getLocalIPAddress();
            InetSocketAddress ipEndPoint = new InetSocketAddress(
                    InetAddress.getByName(localIPAddr), 8222);
            serverSocket = new ServerSocket();
            serverSocket.bind(ipEndPoint, 4);
            workerSocket = serverSocket.accept();

            socketInputStream = new DataInputStream(
                    workerSocket.getInputStream());
            inputText.setText(socketInputStream.readUTF());
        } catch (Exception ex) {
            throw ex;
        }
    }

此处 getLocalIPAddress() 方法返回 Android 设备的 IP 地址。

以下是 Windows 应用程序中的 C# 代码,用于连接到 Android 的 IP 地址 (192.168.1.6) 并向其发送数据:

Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (!clientSocket.Connected)
                    clientSocket.Connect(IPAddress.Parse("192.168.1.6"), 8222);
                clientSocket.Send(Encoding.UTF8.GetBytes(txtInput.Text));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

好吧,客户端 (C#) 无法连接到服务器 (Java) 这意味着数据不会从客户端离开。但它会,如果它连接起来。请告诉我我错过了什么,我在哪里弄错了。 :)

最佳答案

启动 Android 应用程序并连接到 wifi 后,您是否尝试对启动应用程序的 ip 执行 ping 操作。

ping 192.168.1.6

如果可以从运行C#应用程序的工作站访问该IP,请尝试在android ip的IP和端口上执行telnet,看看它是否有效。

telnet 192.168.1.6 8222

如果这两个步骤中的任何一个失败,则可能是 wifi 网络出现问题。正如我多次注意到的那样,路由器的防火墙会过滤掉除 8080 和 80 之外的所有端口。因此您需要打开路由器上的端口。

关于java - 无法将数据从 C# 发送到 Java (Android) 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9339098/

相关文章:

java - 不同的java线程访问同一个变量

java - 使用 SoundPool Android 通过相同的声音播放声音

c# - 简单的复合控件 - 回发不起作用

c# - 需要帮助选择接口(interface)名称

android - 在android中实现一个带有分区的列表

java - OOP 设计 - 私有(private)修饰符

java - 如何使用 JFormattedTextfield 接受字符串之类的名称?

c# - 以异步方式调用普通方法的最佳方法是什么?

android - 没有测试结果

android - 离线打开 Phonegap/Cordova 应用程序