java - 无法从 Android 设备连接到 Java 服务器

标签 java android unity-game-engine server

我有两个项目,一个Java服务器和一个用C#编写的统一客户端。当我运行java服务器时,Unity应用程序已在Windows上成功连接。但是当我尝试在真正的 Android 设备上连接时,它不起作用。Android 使用 USB 电缆连接到笔记本电脑。

简单的java代码

package main;


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server1 {

    private static  final int portnumber=6422;
    public static void main(String[] args){
        ServerSocket serverSocket =null;
        try {
            System.out.println("Server starts on port"+portnumber);
            serverSocket = new ServerSocket(portnumber);

            //Client connecting
            System.out.println("Waiting for clients to connect");
            Socket socket = serverSocket.accept();
            System.out.println("A client has connected");

            System.out.println("server has ended");
        }catch (IOException e){
            e.printStackTrace();

        }
    }
}

客户端代码

using UnityEngine;
using System.Net.Sockets;
using System.IO;
using System;
public class Client : MonoBehaviour
{

    private bool socketready;
    private TcpClient socket;

    public void ConnectToServer()
    {

        //if already connected , ignore this function
        if (socketready)
            return;

        //my laptop private ip address.
        string host = "192.168.1.2";
        int port = 6422;
        //create the socket
        try
        {
            socket = new TcpClient(host, port);
            socketready = true;
        }
        catch (Exception e)
        {
            print("socket error: " + e.Message);
        }
    }}

在统一中,我有按钮(将调用ConnectToServer)。问题是当我尝试单击此按钮时,无法在java控制台中获取“客户端已连接”。

在 android studio 上显示“套接字错误:连接超时

最佳答案

您的防火墙似乎阻止了来自 Android 设备的连接。只是add将编译的 Java 应用程序添加到防火墙异常(exception)列表,以确保它不会阻止传入流量。

<小时/>

不相关,但您需要确保连接功能是在另一个线程中完成的。还要确保您的接收代码也在另一个线程中完成。将接收代码放在连接线程中也可以。

最后,请注意,您不能在另一个线程中使用Unity的API。如果您从另一个线程使用Unity的API,您将需要一种在主线程中执行代码的方法。请查看this我为此制作了包装。

关于java - 无法从 Android 设备连接到 Java 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45042438/

相关文章:

java - 从字符串解析为日期会引发无法解析的日期错误

java - NumberFormatException 无效 int ""

android - 编写我自己的 Google 移动广告 (Admob) 中介适配器

android - Gradle和github存储库,同步缓慢

c# - 协程停止工作

unity-game-engine - Unity3d 在光标位置打开编辑器窗口

java - 根据 XMLSchema.xsd 验证 XML 架构

由于无限初始化导致 Java StackOverflow

java - 用于 Skyrim 的 Java 自动点击器

c# - 如何在 unity/C# 中检测时钟是否设置为 12 小时或 24 小时时间格式?