这是一个简单的客户端 - 服务器Android应用程序。服务器是在本地PC上运行的简单java服务器,客户端在模拟器上运行。这是客户的代码:
package com.example.streamer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
class Connecting implements Runnable
{
private Socket sock;
private BufferedReader r;
private BufferedWriter out;
public Connecting ()
{
Thread th = new Thread(this);
th.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
try
{
System.out.println("************************ trying to initiated *****************");
sock = new Socket("10.0.2.2",12344);
System.out.println("************************ socket initiated *****************");
r = new BufferedReader(new InputStreamReader(sock.getInputStream()));
System.out.println("************************ buffer reader initiated *****************");
out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
System.out.println("************************ buffer writer initiated *****************");
}
catch (IOException ioe) { }
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onResume() {
super.onResume();
System.out.println("************************ on resume *****************");
Connecting c = new Connecting();
}
}
任何人都知道为什么指令sock = new Socket("10.0.2.2", 12344);
没有执行?
答案 0 :(得分:1)
该命令尝试将套接字连接到外部主机。这可能需要很长时间。在许多版本的Android上它甚至会崩溃,因为你不应该在主线程上进行网络调用。将其移动到AsyncTask或线程中。
答案 1 :(得分:1)
问题可能与您未正确设置应用程序权限有关。
您应该编辑AndroidManifest.xml文件,其中包含您的应用程序要求的权限等。
像这样编辑文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.app.myapp" >
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
行<uses-permission android:name="android.permission.INTERNET" />
会使应用程序要求获得连接到Internet的权限。
答案 2 :(得分:0)
在清单文件中添加这两个条件
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
它现在可以正常工作......任何其他帮助PLZ评论