Android中仅客户端编程的套接字

Connorwstein

我想打开一个TCP连接,以将数据发送到android应用程序中的ip地址。我发现的每个套接字编程文章/线程都同时显示客户端和服务器端代码(通常是聊天程序)。是否可以仅在Android设备上运行客户端代码,然后将任意数据发送到例如Google的IP地址?现在我正在使用此线程(最高支持的答案)中的代码(Android客户端套接字),如何读取数据?在扩展AsynchTask的类中,如下所示:

public class InternetTask extends AsyncTask<Void, Integer, Void> {
    public static final int BUFFER_SIZE = 2048;
    private Socket socket = null;
    private PrintWriter out = null;
    private BufferedReader in = null;
    private int port = 80;
    private String host = null;
    private static final String TAG="sure2015test";

    public InternetTask(String host,int port) {
        this.host=host;
        this.port=port;
    }

    @Override
    protected Void doInBackground(Void... args) {


        connectWithServer();
        Log.i(TAG, "Connected");
        sendDataWithString("hello");
        Log.i(TAG, "Sent data");
        String response=receiveDataFromServer();
        Log.i(TAG,response);
        disConnectWithServer();
        return null;
    }


    private void connectWithServer() {
        try {
            if (socket == null) {
                socket = new Socket(this.host, this.port);
                out = new PrintWriter(socket.getOutputStream());
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            }
        } catch (IOException e) {
            Log.i(TAG,"IO Exeception");
            e.printStackTrace();
        }
    }

    private void disConnectWithServer() {
        if (socket != null) {
            if (socket.isConnected()) {
                try {
                    in.close();
                    out.close();
                    socket.close();
                } catch (IOException e) {
                    Log.i(TAG,"IO exception disconnecting");
                    e.printStackTrace();
                }
            }
        }
    }

    public void sendDataWithString(String message) {
        if (message != null) {
            connectWithServer();
            out.write(message);
            out.flush();
        }
    }

    public String receiveDataFromServer() {
        try {
            String message = "";
            int charsRead = 0;
            char[] buffer = new char[BUFFER_SIZE];
            Log.i(TAG,"Message before: "+message);
            while ((charsRead = in.read(buffer)) != -1) {
                message += new String(buffer).substring(0, charsRead);
                Log.i(TAG,message);
            }
            Log.i(TAG,"Message after: "+message);
            disConnectWithServer(); // disconnect server
            return message;
        } catch (IOException e) {
            Log.i(TAG,"IO Error in receiving message");
            return "Error receiving response:  " + e.getMessage();
        }
    }
}

还有我在MainActivity.java中的onCreate方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    InternetTask task=new InternetTask("74.125.226.159",80);
    task.execute();
}

当我运行它时,我在日志中得到了这个:

05-16 00:01:04.368      622-637/? I/sure2015test﹕ Connected
05-16 00:01:04.369      622-637/? I/sure2015test﹕ Sent data
05-16 00:01:04.369      622-637/? I/sure2015test﹕ Message before:
05-16 00:03:04.405      622-637/com.example.connorstein.sockethelloworld I/sure2015test﹕ Message after:

因此,使用Google的IP在端口80上打开套接字时也没有例外,发送或接收数据也没有例外。看来我没有回应。这是因为我发送的数据(“ hello”)毫无意义吗?我认为至少我会得到一个响应,说无效请求或类似的内容。我也尝试发送“ GET / HTTP / 1.0”,但也没有响应。

Google回应为空白,因为您没有向其发送正确的HTTP请求。模仿普通Web浏览器的请求,您将得到响应。HTTP是建立在TCP之上的协议。您需要遵循该协议,以从服务器中获取所有有用的信息。

获得响应的最小浏览器标头示例:

GET / HTTP/1.1\r\nUser-Agent: curl/7.37.1\r\nHost: www.google.com\r\nAccept: */*\r\n\r\n

不要使用Web服务器,而应考虑使用SSH服务器。SSH服务器将发送类似...

SSH-2.0-OpenSSH_5.3\r\n

...当您连接时。始终响应的服务器对客户端代码进行故障排除要容易得多。请注意,您可能会使系统管理员疯狂地不断连接到他们的ssh服务器。您可能想建立自己的测试对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与许多客户端进行套接字编程中的客户端到客户端通信

来自分类Dev

TCP客户端在android服务中读写套接字

来自分类Dev

套接字中的Java客户端

来自分类Dev

Python套接字服务器/客户端编程

来自分类Dev

套接字编程-简单的客户端/服务器

来自分类Dev

套接字编程-客户端主机正在工作

来自分类Dev

如何将客户端的 IP 存储在 C 中的数组中(套接字编程)

来自分类Dev

Linux客户端与linux / windows服务器与android之间的套接字编程

来自分类Dev

使用Python服务器和Android客户端进行套接字编程

来自分类Dev

使用Python服务器和Android客户端进行套接字编程

来自分类Dev

在套接字编程中,为什么客户端未绑定到地址?

来自分类Dev

如何在python中运行多线程以进行多客户端套接字编程?

来自分类Dev

如何在Android中通过套接字建立客户端到客户端语音呼叫

来自分类Dev

Web套接字连接从Android客户端失败

来自分类Dev

Android聊天客户端:套接字连接

来自分类Dev

(Java / Android)客户端套接字抛出IOException

来自分类Dev

Android套接字客户端readUTF不起作用

来自分类Dev

在FTP客户端套接字程序中拒绝连接

来自分类Dev

在Go中写入客户端UDP套接字

来自分类Dev

在FTP客户端套接字程序中拒绝连接

来自分类Dev

TCP客户端套接字无法在onActivityResult()中运行

来自分类Dev

套接字客户端程序中的错误

来自分类Dev

将Android客户端连接到NodeJS中的套接字服务器时出错

来自分类Dev

有关在C(Linux)中的套接字服务器客户端编程中的accept()的问题

来自分类Dev

有关C语言(Linux)中套接字服务器客户端编程中accept()的问题

来自分类Dev

Powershell SSL套接字客户端

来自分类Dev

套接字客户端如何setSoTimeout

来自分类Dev

套接字客户端连接

来自分类Dev

Winsock客户端套接字无效

Related 相关文章

  1. 1

    与许多客户端进行套接字编程中的客户端到客户端通信

  2. 2

    TCP客户端在android服务中读写套接字

  3. 3

    套接字中的Java客户端

  4. 4

    Python套接字服务器/客户端编程

  5. 5

    套接字编程-简单的客户端/服务器

  6. 6

    套接字编程-客户端主机正在工作

  7. 7

    如何将客户端的 IP 存储在 C 中的数组中(套接字编程)

  8. 8

    Linux客户端与linux / windows服务器与android之间的套接字编程

  9. 9

    使用Python服务器和Android客户端进行套接字编程

  10. 10

    使用Python服务器和Android客户端进行套接字编程

  11. 11

    在套接字编程中,为什么客户端未绑定到地址?

  12. 12

    如何在python中运行多线程以进行多客户端套接字编程?

  13. 13

    如何在Android中通过套接字建立客户端到客户端语音呼叫

  14. 14

    Web套接字连接从Android客户端失败

  15. 15

    Android聊天客户端:套接字连接

  16. 16

    (Java / Android)客户端套接字抛出IOException

  17. 17

    Android套接字客户端readUTF不起作用

  18. 18

    在FTP客户端套接字程序中拒绝连接

  19. 19

    在Go中写入客户端UDP套接字

  20. 20

    在FTP客户端套接字程序中拒绝连接

  21. 21

    TCP客户端套接字无法在onActivityResult()中运行

  22. 22

    套接字客户端程序中的错误

  23. 23

    将Android客户端连接到NodeJS中的套接字服务器时出错

  24. 24

    有关在C(Linux)中的套接字服务器客户端编程中的accept()的问题

  25. 25

    有关C语言(Linux)中套接字服务器客户端编程中accept()的问题

  26. 26

    Powershell SSL套接字客户端

  27. 27

    套接字客户端如何setSoTimeout

  28. 28

    套接字客户端连接

  29. 29

    Winsock客户端套接字无效

热门标签

归档