java - Android 应用程序启动套接字不工作

标签 java android sockets networking emulation

这是一个简单的客户端-服务器 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); 没有执行吗?

最佳答案

问题可能与您没有为您的应用程序正确设置权限有关。

您应该编辑 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 的权限。

关于java - Android 应用程序启动套接字不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050077/

相关文章:

java - 将从外部文件检索到的浮点值转换为 float 组。使其与方法匹配

java - 如何修复 "specify a valid range of job id' 以供 WorkManager 使用”

android - ionic 构建错误 : You have not accepted the license agreements of the following SDK components: [Android SDK Platform 24]

c - 使用 Unix 域套接字进行电话通话的 IPC 机制

Node.js socket.io 函数不在服务器和客户端之间发送

java - openstack4j 中的 RestEasyProviderFactory ClassCastException

java - 使用递归/辅助函数计算链表的大小 - Java

java - SpannableStringBuilder不会显示Firebase(Kotlin)中每个数据的图像范围

Android AdMob 横幅广告未显示

c - 某些 OSX 会阻止对端口 80 的套接字调用,直到完成 HTTP 请求