首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServerSocket安卓

ServerSocket安卓
EN

Stack Overflow用户
提问于 2012-06-20 02:38:37
回答 2查看 11.8K关注 0票数 0

嘿,社区,我有下面的ServerSocket,它应该监听端口53000并记录任何接收到的数据。但是,我似乎无法通过server.accept()阻塞调用。

代码语言:javascript
复制
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());
            }
        }

    }

我还在Manifest文件中为应用程序提供了INTERNET权限。()

更令人费解的是,我还验证了客户端响应是否发送到该端口。

有什么特别需要我做的吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-20 03:22:04

你的代码非常混乱,甚至不能编译。我做了一些调整,这样我就可以测试你的代码了,它工作得很好。下面是我使用的测试应用程序:

代码语言:javascript
复制
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();
            }
        }
    }   
}

使用这段代码和通过adb shell运行的netcat,我能够连接并与应用程序通信。

票数 9
EN

Stack Overflow用户

发布于 2013-11-21 13:19:14

在使用客户端时,声明这些方法以访问流

代码语言:javascript
复制
// gets the input stream // ObjectInputStream input; 
// gets the output stream // ObjectOutputStream output;
// ServerSocket server;
// Socket connection;

也许你有另一个访问套接字的类;

代码语言:javascript
复制
server = new ServerSocket(5001, 100);

//步骤1创建套接字连接服务器=新的ServerSocket(5001,100);while(条件为真)

// step 2等待连接

// step 3获取流

//第四步:处理连接

//步骤5:关闭连接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11107258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档