1

这是一个简单的客户端-服务器安卓应用程序。服务器是在本地 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);没有执行?

4

3 回答 3

1

该命令尝试将套接字连接到外部主机。这可能需要很长时间。在许多版本的 Android 上,它甚至会崩溃,因为您不应该在主线程上进行网络调用。将其移动到 AsyncTask 或线程中。

于 2013-02-24T08:46:06.690 回答
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 的权限。

于 2013-02-24T09:45:03.103 回答
0

在清单文件中添加这两个条件

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

它现在可以工作了......对于任何其他帮助请评论

于 2014-05-13T05:47:51.397 回答