【问题标题】:Android emulator and PC server socket communicationAndroid模拟器与PC服务器socket通信
【发布时间】:2012-07-22 13:37:20
【问题描述】:

我已经编写了一个服务器-客户端模型的 android 程序。我的电脑充当服务器,AVD 充当客户端。我使用 10.0.2.2 作为服务器的地址来连接,但服务器端什么也没收到。当客户端是普通的 java 程序时,我的服务器工作正常。当客户端是 Android 模拟器时会出现问题。我一直在研究这个问题很长时间,但我仍然没有解决方案。希望有人可以帮助我,谢谢! 我的代码: 服务器:

import java.net.*;
import java.io.*;
public class Server {

    public static void main(String[] args) throws IOException{

        ServerSocket server = new ServerSocket(6002);
        while(true){
            Socket client = server.accept();
            BufferedReader in= new BufferedReader(new InputStreamReader(client.getInputStream())); 
            System.out.println(in.readLine());
        }
    }
}

客户:

public class modules extends Activity {
    private ListView myListView;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.modules);
        myListView = (ListView)findViewById(R.id.listView1);

        Intent intent = getIntent();
        Bundle b = intent.getExtras();
        String semester = b.getString("semester");
        String subject = b.getString("subject");

        try {
            Socket socket = new Socket("10.0.2.2",6002);
            PrintWriter out=new PrintWriter(socket.getOutputStream(),true);  
            String s1 = "SEME" + semester;
            out.println(s1);
            out.flush();
            String s2 = "SUBJ" + subject;
            out.println(s2);
            out.flush();
            socket.close();

        } catch(UnknowHostException e) {
              e.printStackTrace();
        } catch(IOException e) {
               e.printStackTrace();
        }
    }
}

在 logcat 中有如下错误:

android.os.NetworkOnMainThreadException;

还有严格模式的错误:

07-22 14:24:24.892: E/AndroidRuntime(759):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099).

我已经在manifest xml文件中添加了用户权限,所以问题一定是别的。

【问题讨论】:

  • logcat 有错误吗?权限可能吗?
  • 有效的 Java #65:不要忽略异常。 更不用说执行“一刀切”Exception 忽略它完全。难怪您在寻找原因时遇到问题...
  • 非常感谢你们!我是新来的,你的好意让我印象深刻!
  • 我在 xml 文件中获得了用户权限,所以问题可能出在其他问题上...@charlypu
  • 调试直到到达失败的行(如果失败)。所以我们可以有更多的信息.​​.....

标签: android sockets client-server


【解决方案1】:

查看错误内容:NetworkOnMainThreadException。这意味着您不应该在 Android 的主线程上进行网络操作,因为如果您的请求碰巧延迟了一段时间,设备的响应将被阻塞,直到该请求完成。

为了在 android 上使用 Socket 客户端,你应该看看 AsyncTask、Thread 或 Service。我建议您使用非常简单的 AsyncTask。您在 onCreate() 方法中的代码应该放在另一个以这种方式扩展 AsyncTask 的类中:

public class YourAsyncTask extends AsyncTask<Void, Void, Void>
{
    protected Void doInBackground(Void... params)
    {
        //your socket code here...
    }
}

有关更多信息,请查看 AsyncTask 的文档或浏览 web/stackoverflow 以获取完整示例!

希望这会有所帮助...再见。

【讨论】:

  • 问题已解决。非常感谢!我希望我能像你一样成为专家。还要感谢@charlypu 的帮助!
  • 我不是专家,只是遇到了与您相同的错误并解决了它:)。祝你好运!您可以将其标记为正确答案,以便问题显示为已解决。问候。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2020-07-07
  • 2015-03-13
  • 1970-01-01
相关资源
最近更新 更多