Android Socket Client 未发送并自行关闭

2023-12-06

我对 android 和 java 编程很陌生,我需要你的帮助。我想在我的 PC (Windows 7) 上创建 Android 客户端和服务器。我用putty(一个模仿客户端的程序(没有编程错误^^))检查了我的服务器编程是否没有错误。因此我认识到我的服务器编程正确。

在这里您可以看到我运行良好的服务器:

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

  ServerSocket serverSocket = null;

  try {
      serverSocket = new ServerSocket(4449);
      System.out.println("Listening on port: 4449");
  } catch (IOException e){
      System.err.println("Could not listen on port 4449.");
      System.exit(1);
  }

  Socket clientSocket = null;

  try {
      clientSocket = serverSocket.accept();
   System.out.println("Got connection.");
  } catch (IOException e) {
      System.err.println("Accept failed: 4449.");
      System.exit(1);
  }

  BufferedReader in = null;
  PrintWriter out = null;
  try {
      in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

      out = new PrintWriter(clientSocket.getOutputStream(), true);
  } catch (IOException e) {
      System.err.println("Read failed");
      e.printStackTrace();
  }


  try {

      System.out.println("message: " + in.readLine());
      out.println("hab was bekommen!");
  } catch (IOException e) {
      System.err.println("Can't get a message from Client.");
      e.printStackTrace();

  }
  }
  }

我还尝试为该服务器创建一个 Android 客户端,但我没有成功。

这是我的主要活动:

public class AndroidClient extends Activity {

EditText textOut;
TextView textIn;
TextView problems;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_android_client);

    textOut = (EditText)findViewById(R.id.textout);
    Button buttonSend = (Button)findViewById(R.id.send);
    textIn = (TextView)findViewById(R.id.textin);
    problems = (TextView)findViewById(R.id.problems);
    buttonSend.setOnClickListener(buttonSendOnClickListener);
}

Button.OnClickListener buttonSendOnClickListener 
= new Button.OnClickListener() {


    @Override
    public void onClick(View arg0) {
        //TODO Auto-generated method stub
        Socket client = null;


        BufferedReader in = null;
        PrintWriter out = null;

        try {
            client = new Socket("192.168.2.107", 4449);
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            out = new PrintWriter(client.getOutputStream(), true);
        } catch (UnknownHostException e) {
            problems.setText("Unknown host: 192.168.2.107");
        } catch (IOException e) {
            // System.out.println("No Input/Output.");
            problems.setText("No Input/Output.");
        }

        try {
            out.println("Hallo.");
            textIn.setText(in.readLine());
        } catch (IOException e) {
            problems.setText("Can't send/ get message.");
        }
    }   
};



@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_android_client, menu);
    return true;
}
    }

到目前为止,一切都很好。当我在 Android 智能手机上启动应用程序时,应用程序启动没有任何问题。然后我在我的 EditText 字段“textOut”中输入一些内容并按下“发送”按钮。然后我的屏幕变黑,应用程序自行关闭。我还在 AndroidManifest.xml 中粘贴了进入互联网并使用访问 Wifi 的权限。

我希望有人可以帮助我,因为我已经研究这个问题两天了,但还没有找到任何解决方案。我主要使用这一面(http://android-er.blogspot.de/2011/01/simple-communication-using.html),当然还有其他一些方面,但在那里我得到了最多的信息。此外,我的源代码中没有显示错误。

亲切的问候,

卢卡斯5060

编辑:这是我的 LogCat:

12-28 20:21:55.929: I/dalvikvm(698): threadid=3: 对信号 3 做出反应 12-28 20:21:56.039:I/dalvikvm(698):将堆栈跟踪写入“/data/anr/traces.txt” 12-28 20:21:56.259: I/dalvikvm(698): threadid=3: 对信号 3 做出反应 12-28 20:21:56.299:I/dalvikvm(698):将堆栈跟踪写入“/data/anr/traces.txt” 12-28 20:21:56.741:D/gralloc_goldfish(698):检测到没有 GPU 模拟的模拟器。 12-28 20:21:56.771:I/dalvikvm(698):threadid=3:对信号 3 做出反应 12-28 20:21:56.789:I/dalvikvm(698):将堆栈跟踪写入“/data/anr/traces.txt” 12-28 20:23:58.430: D/AndroidRuntime(698): 关闭虚拟机 12-28 20:23:58.430: W/dalvikvm(698): threadid=1: 线程因未捕获的异常而退出 (group=0x409c01f8) 12-28 20:23:58.470: E/AndroidRuntime(698): 致命异常: main 12-28 20:23:58.470: E/AndroidRuntime(698): android.os.NetworkOnMainThreadException 12-28 20:23:58.470: E/AndroidRuntime(698): 在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 libcore.io.IoBridge.connectErrno(IoBridge.java:127) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 libcore.io.IoBridge.connect(IoBridge.java:112) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 java.net.Socket.startupSocket(Socket.java:566) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 java.net.Socket.tryAllAddresses(Socket.java:127) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 java.net.Socket.(Socket.java:177) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 java.net.Socket.(Socket.java:149) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 net.ibasic.AndroidClient$1.onClick(AndroidClient.java:50) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 android.view.View.performClick(View.java:3511) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 android.view.View$PerformClick.run(View.java:14105) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 android.os.Handler.handleCallback(Handler.java:605) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 android.os.Handler.dispatchMessage(Handler.java:92) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 android.os.Looper.loop(Looper.java:137) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 android.app.ActivityThread.main(ActivityThread.java:4424) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 java.lang.reflect.Method.invokeNative(本机方法) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 java.lang.reflect.Method.invoke(Method.java:511) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 12-28 20:23:58.470: E/AndroidRuntime(698): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 12-28 20:23:58.470:E / AndroidRuntime(698):在dalvik.system.NativeStart.main(本机方法) 12-28 20:23:59.070: I/dalvikvm(698): threadid=3: 对信号 3 做出反应 12-28 20:23:59.100:I/dalvikvm(698):将堆栈跟踪写入“/data/anr/traces.txt” 12-28 20:24:02.420:I/Process(698):发送信号。 PID:698 SIG:9


好吧,我的猜测是,问题是您在主 ui 线程中执行此操作,这远非推荐的。相反,你应该做的是结帐AsyncTask这是执行此类操作的首选方式(从文件或网络读取以及一堆其他内容)。

这比听起来更容易,您需要做的就是这样(注意这只是为了让您感受一下它的外观):

private class CreateSocketTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... urls) {
        //Do the socket stuff here...
    }

    @Override
    protected void onPostExecute(String result) {
        //This is called when doInBackground has finished
        //From here you'd call a method in the main ui class.
    }
}

继承人安卓文档

网上有很多教程,因此您很快就能上手并运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Socket Client 未发送并自行关闭 的相关文章

随机推荐

  • Javascript正则表达式尝试将名称拆分为标题/名字/姓氏

    我想尝试在 Javascript 中检测一个人名字的不同部分 并将它们剪掉 以便我可以将它们传递给其他东西 名称可以以任何格式出现 例如 维多利亚小姐莱恩 龙志杰小姐 鲍勃 史密斯 Fred Mr Davis 我想尝试写一些简单的东西 这样
  • Visual Studio 设置和部署:添加先决条件

    如何将我希望客户端拥有更多组件的设置和部署项目添加到其中 例如 Microsoft Chart Controls Microsoft SQL 2008 Express Edition not 2005 etc 替代文本http img55
  • 获取上周六的日期 - BusyBox 1.1.0

    由于 BusyBox 中的日期功能不如gnu date 我在计算上周六的日期时遇到问题 last sat date Y m d d last saturday 只适用于 gnu date 我发现了类似的东西可以从 Epoch 计算 busy
  • MVC Web Api 不允许 Windows 身份验证

    我有一个简单的 MVC web api 2 IIS 托管应用程序 我想启用 Windows 身份验证 最初不使用 Owin 我在我的开发机器上运行它并作为本地 IIS 运行 因此 根据我所能找到的 我需要将以下内容添加到 web confi
  • Python 共享库:RTLD_GLOBAL 段错误

    我使用 python swig 包装的 C 库 在它的 init py文件 它sets在导入包含实现代码的共享对象文件之前 使用 dlopen 标志 RTLD GLOBAL 这会导致随后导入 scipy linalg 出现段错误 至少在我的
  • 在c++中实现多个接口

    我的接口层次结构如下 class A public void foo 0 class B public A public void testB 0 class C public A public void testC 0 现在 我想通过相同
  • 如何以编程方式在 iOS 中更改/添加连接 WiFi 的 DNS 服务器?

    我想以编程方式在 iOS 中更改 添加 iPhone 设备连接 WiFi 的 DNS 服务器 Google 公共 DNS IP 地址 IPv4 如下 8 8 8 8 8 8 4 4 我想以编程方式更改 添加它 就像所附屏幕截图中一样 请帮忙
  • Scala Spark:展平键/值结构数组

    我有一个输入数据框 其中包含一个数组类型的列 数组中的每个条目都是一个由键 大约四个值之一 和值组成的结构 我想将其转换为一个数据框 其中每个可能的键都具有一列 并且该值不在该行的数组中的情况下为空 键在任何数组中都不会重复 但它们可能会乱
  • 用不同的颜色对线条进行动画处理

    我正在尝试将我的数据动画化以进行演示 我正在尝试使用 python 的动画包来做到这一点 我想做的事情大致可以归结为第一个例子http jakevdp github io blog 2012 08 18 matplotlib animati
  • Karate-Gattle:报告中带有查询参数的请求未聚合

    我正在对空手道加特林进行 POC 以重复使用我的测试 我已参考文档并安装了这些版本 首先 一切都像往常一样很棒 非常容易设置和启动 我正在调用一个功能文件MySimualtion scala其中还有另外三个抽象功能调用 如下所示 def t
  • 将 Adob​​e Air 3.3 SDK 与 Flash Builder 结合使用

    Adobe Air SDK V3 3终于于2012年6月8日发布 可以在这里下载 http www adobe com products air html 现在我尝试在 Flash Builder V4 6 中使用它 方法是在 Applic
  • 如何将 GPS 和网络位置坐标发送到服务器(静态 IP)?

    我是 Android 开发的初学者 我想制作一个 Android 应用程序 它将 GPS 和网络位置 纬度和经度 发送到我的服务器 静态 IP 我找到了以下代码并且它工作成功 在服务器端已经制作的应用程序中接收数据 现在它与客户端应用程序无
  • 动态添加验证规则

    我有一个插件 它通常处理用于 CRUD 操作的 jQuery 对话框的创建 添加到对话框的表单标记可在插件代码外部使用 并且插件只需请求 http 服务提供标记 并且在收到标记时只需将其添加到对话框本身 然后我在插件中创建了一个回调 onS
  • Java 虚拟机的字节顺序

    Java 在其虚拟机中使用什么字节序 我记得在某处读到它取决于它运行的物理机器 然后我在其他地方读到它总是 我相信 大端 哪个是对的 多字节数据在class文件以大端存储 From Java 虚拟机规范 Java SE 7 版 第 4 章
  • 是否可以将一个 XOR 约束链接到 UML 中的另一个 XOR 约束?

    这是我想做的一个例子 假设我有 5 个类 我想表达这样的约束 我们可以有一个类 B 或 和 C 的实例链接到 A 如果是这样 我们就不能有其他任何东西 如果我们不这样做没有这些类的任何实例 我们只能有 D 或 E 类的一个实例 我在这里查看
  • 阻止 MFC 应用程序将光标更改回默认图标

    我编写了一个应用程序 它根据光标在窗口客户区域内的位置来更改光标 但是我注意到 当我单击鼠标左键时 光标会变回默认箭头图标 我已经覆盖了afx msg void CWnd OnLButtonDown 并且不要调用其中的任何基类函数 它完全是
  • 有什么方法可以增加 MATLAB 中的“realmax”吗?

    我的机器上的 realmax 是 1 7977e 308 我知道我必须以一种避免长整数计算的方式编写代码 但是有什么方法可以增加限制吗 我的意思是像 C 中的 gmp 库之类的东西 你可能会发现vpa 变精度算术 有帮助 R vpa A 使
  • 如何做出类似tokiolab.it的视差效果? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我读了很多关于 jQuery 视差的文章 但我根本不明白 我想做和这个网站一样的事情 http www tokiolab it 正如您所看到的 第一页是一个非常简单的动画 但是当
  • 从命令行使用参数(连接字符串、用户、密码...)打开 SQL Developer

    是否可以使用参数 例如 Connectstring SID 主机 用户 密码 从命令行打开 Oracle SQL Developer 4 我想从 KeePass 运行它 并且我想移交这些参数来访问数据库 Thanks 不 这对于 SQL D
  • Android Socket Client 未发送并自行关闭

    我对 android 和 java 编程很陌生 我需要你的帮助 我想在我的 PC Windows 7 上创建 Android 客户端和服务器 我用putty 一个模仿客户端的程序 没有编程错误 检查了我的服务器编程是否没有错误 因此我认识到