ServerSocket的安卓 [英] ServerSocket Android

查看:81
本文介绍了ServerSocket的安卓的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿社会,我有以下的ServerSocket应该侦听端口53000,并记录任何接收到的数据。不过,我似乎无法让过去的server.accept()阻塞调用。

Hey community I have the following ServerSocket which should listen to port 53000 and log any received data. However, I cannot seem to get past the server.accept() blocking call.

public void run() {

        SocketServer server = new ServerSocket(53000);


        //---buffer store for the stream---
        byte[] buffer = new byte[1024];
        //---bytes returned from read()---
        int bytes;

        //---keep listening to the InputStream until an
        // exception occurs---
        while (true) {
            try {

                socket = server.accept();
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                String str = in.readLine();

                Log.i("received response from server", str);

                in.close();
                socket.close();

            } catch (IOException e) {
                Log.e(TAG, e.getMessage());
            } catch (Exception e){
                server.close();
                Log.e(TAG, e.getMessage());
            }
        }

    }

我也给应用程序的清单文件中的INTERNET权限。 ()

I have also given the application the INTERNET permission in the Manifest file. ()

要添加到神秘,我也验证了客户端的响应被发送到该端口。

To add to the mystery, I have also verified client responses get sent to that port.

有没有什么特别的,我需要做的,使这项工作?

Is there something in particular I need to do to make this work?

感谢。

推荐答案

您code是非常乱,甚至不会编译。我做了一些调整,这样我可以测试你的code和它的正常工作。下面是测试应用程序我使用:

Your code is very messy and won't even compile. I made some adjustments so that i could test your code, and it's working fine. Here is the test application I used:

package com.test.stackoverflow

import java.io.BufferedReader;

public class ServerSocketTestActivity extends Activity {
    /** Called when the activity is first created. */
    private static String TAG = "ServerSocketTest";

    private ServerSocket server;

    Runnable conn = new Runnable() {
        public void run() {
            try {
                server = new ServerSocket(53000);

                while (true) {
                    Socket socket = server.accept();
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(socket.getInputStream()));

                    String str = in.readLine();

                    Log.i("received response from server", str);

                    in.close();
                    socket.close();
                }
            } catch (IOException e) {
                Log.e(TAG, e.getMessage());
            } catch (Exception e) {             
                Log.e(TAG, e.getMessage());
            }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        new Thread(conn).start();
    }

    @Override
    protected void onPause() {      
        super.onPause();
        if (server != null) {
            try {
                server.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }   
}

使用这个code,并通过亚行外壳我是能够连接和通信与应用程序。netcat的运行

Using this code and netcat running via adb shell I was able to connect and communicate with the application.

这篇关于ServerSocket的安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆