美文网首页Android开发
关于Android的Socket编程

关于Android的Socket编程

作者: 撩人的风光 | 来源:发表于2022-09-14 16:29 被阅读0次

    在一些大厂中,为了使网络操作比较灵活的,通常会采用Socket编程,我也是如此,目前公司要求使用socket进行简单的请求协议的封装和socket的一些基本使用,我在这里分享一下心得。

    首先,我们需要了解一下socket是什么东西。Socket中文名字套接字是属于网络请求中比较底层的操作,利用socket发送请求都是直接操作流数据(inputSteam,outputSteam)。说白了就是比较底层,连请求协议都没有封装的一种前后端交互方式。

    那么了解了Socket是什么之后,接下来我来说一下客户端对于Socket的使用流程:

    step 1.创建Socket实例

    step 2.判断是否连接成功

    step 3.获取输出流(outputSteam)

    step 4.获取输入流(inputSteam)

    step 5.释放资源

    上面的步骤执行完之后,就完成了一个简单的网络请求的操作了,下面我直接用代码来实现上面的步骤(例子用kotlin来实现):

    val socket = Socket("www.baidu.com",80)

    if (socket.isConnected) {

        val butterWriter= BufferedWriter(OutputStreamWriter(socket.getOutputStream()))        bufferWriter.write("需要发送到目标主机的内容")                                                bufferWriter.flush()                                                                                                          val bufferedReader  = BufferedReader(InputStreamReader(socket.getInputStream()))                                         //这里开始读取信息流 就不过多的写了

        //最后记得释放资源

        socket.close()

    }

    上面这种是最简的写法,但是会发现一个问题,首先socket的连接是耗时的,如果不在同一个线程中操作,很可能会出现if中的代码不执行,原因就是socket咩有初始化完成,但是我查看socket的文档发现socket好像并没有类似的回调,所以我自己用笨方法写了一个:

    fun setConnectedListener(listener: () -> Unit) {                    GlobalScope.launch(Dispatchers.IO) {                                                                            while (socket?.isConnected == false) { }                                                  withContext(Dispatchers.Main) {                                                                            listener.invoke()                                                                                                          }                                                                                                                                 }                                                                                                                                    }

    这样做虽然比较笨,但是用来很好用,也解决了连接成功无监听的问题了。

    就先写到这里吧,之后有什么问题,会及时更新的、

    相关文章

      网友评论

        本文标题:关于Android的Socket编程

        本文链接:https://www.haomeiwen.com/subject/coflortx.html