0

我已经看到了其中一些问题,但似乎没有一个答案可以解决我的问题。我想从我的客户端(Android 手机,我实际上有一个物理设备)在我的服务器(PC)上显示一条消息。我有一个非常简单的 PC 服务器:

public void run(int port) throws Exception
{
    ServerSocket ss = new ServerSocket(port);
    Socket sock = ss.accept();

    BufferedReader reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));

    System.out.println(reader.readLine());
}

(在我的主要空白中):

Server s = new Server();
s.run(4444);

还有一个极其简单的 Android 客户端:

package com.j03.client;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import java.io.*;
import java.net.*;

public class MainActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        try
        {
            runClient("10.0.2.2", 4444, "hey");
        }
        catch (Exception e)
        {
            TextView t = new TextView(this);
            t.setText(e.getMessage());
            setContentView(t);
        }
    }

    public static void runClient(String ip, int port, String message) throws Exception
    {
        Socket sock = new Socket(ip, port);
        PrintStream ps = new PrintStream(sock.getOutputStream());
        ps.println(message);
    }
}

我的清单文件中也有适当的互联网权限:

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

并且客户端代码可以作为 PC 客户端正常工作。(PC 客户端到 PC 服务器工作正常)。

但我无法让它在 Android 上运行!

PC 服务器根本不显示任何内容。:(

有谁知道我可能做错了什么?

4

1 回答 1

0

您也可能在 UI 线程上执行所有这些操作。我认为如果你这样做并显示应用程序没有响应对话框,android 有时会杀死你的应用程序。

另一张海报关于您的 Activity 在发生异常之前为空也是正确的。我会解决这个问题并尝试使用你的 runClient 启动一个单独的线程

于 2013-03-08T22:36:55.250 回答