我在eclipse中做了一个基本的服务器:
Server server;
int tcp = 8885, udp = 8885;
public ServerMain() {
server = new Server();
server.addListener(new Listener() {
public void connected(Connection c) {
System.out.println("Connection made");
}
public void received(Connection c, Object p) {
}
public void disconnected(Connection c) {
System.out.println("Disconnection made");
}
});
server.start();
try {
server.bind(tcp, udp);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ServerMain();
}
然后我在 android studio 中创建了我的客户端。我正确安装了库。(根据google)我将Kryonet jar放入libs文件夹,然后重建项目。然后我可以使用 Kryonet 课程。这是我的客户代码:
Client client;
String ip = "MY.IP.ADDRESS";
int tcp = 8885, udp = 8885;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "Start");
client = new Client();
client.addListener(new Listener() {
public void received(Connection c, Object p) {
}
});
client.start();
try {
client.connect(5000, ip, tcp, udp);
Log.i(TAG, "conected");
} catch(IOException e) {
Log.i(TAG, "Error: " + e.getMessage());
}
}
它与我在普通 Java 客户端中使用的代码完全相同,只是现在它直接从我的 android 设备运行。我收到此错误:
Error: Unable to connect to: /MY.IP.ADDRESS:8885
即使我将其全部转发,它也无法连接到我的 IP。为什么连接不上?我已在线阅读以将其添加到我的清单文件中:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
所以我做了:
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
仍然完全无济于事。我究竟做错了什么?(PS 我已经尝试过使用我的网络 IP 和公共 IP。我不知道我做错了什么,使用普通的 Java 程序一切正常,但使用 android 应用程序会出错。)