• Android基本功:Socket


    一、TCP/IP协议基础 

    • IP协议:保证计算机能发送和接收分组数据,用户网络寻址,负责将消息从一个主机传送到另一主机,消息发送的时候被分割成一个个小包 

    • TCP协议:负责收集这些信息,并将其按适当的次序放好传送,在接收端收到后再正确地还原,并通过重发机制保证了数据在传送的过程中准确无误; 

    • 在通信的两端建立一个Socket,从在通信的两端之间建立虚拟的链路进行通信 

     

    二、使用ServerSocket创建TCP服务器端 

    • 建立了链路之后并没有服务端和客户端之分,在建立链路之前,必须有一个通信实体做出“主动姿态”接收其它通信实体的连接 

    • ServerSocket用来监听来自客户端的Socket连接,如果没有连接,它一直处于等待状态 

      • Socket accept()方法:监听客户端的连接请求,如果接收到返回一个Socket对象与连接客户端Socket对应的Socket(通常通过不断的循环调用ServerSocket的accept()方法); 

      • 提供了如下几个构造方法 

        • ServerSocket(int port)方法:用指定端口port来创建一个ServerSocket,该端口应该是一个有效的端口数值:0~65535(绑定默认的IP,通常绑定1024以上的端口,为了避免和其它程序的冲突); 

        • ServerSocket(int port,int backlog)方法:增加了一个用来改变队列长度的参数backlog 

        • SetverSocket(int port,int backlog,InetAddress localAddr):在机器存在多个IP的情况下,允许通过localAddr这个参数来指定将ServerSocket绑定到指定的Ip地址 

      • 当ServerSocket使用完毕后,应使用ServerSocket的close()方法关闭该ServerSocket 

       

    三、使用Socket进行通信 

    • 客户端通常使用Socket的构造器来连接指定的服务器,提供了如下几个构造方法 

      • Socket(inetAddress/String remoteAddress,int port):创建到指定远程主机,远程端口的Socket(默认使用本地默认IP); 

      • Socket(intAddress/String remoteAddress,int port,InetAddress localAddr,int localPort):创建连接到指定远程主机、远程端口的Socket,并指定本地的IP地址和本地的端口(适用于本地多个IP地址的情形); 

    • 当构造Socket对象后,就会连接指定服务器,让服务器端的ServerSocket的accept()方法执行,产生一对相互连接的Socket 

     

    • 当客户端和服务端产生了对应的Socket之后,程序在无须区分客户端和服务端,而是通过各种的Socket进行通信,Socket提供了如下两个方法来获取输入流和输出流: 

      • InputStream getInputStream()方法:返回该Socket对象对应的输入流,让程序通过该输入流从Socket读取数据 

      • OutputStream getOutputStream()方法:返回该Socket对象对应的输出流,让程序通过该输出流向Socket输出数据 

       

    • 在实际应用中,程序可能不像让执行网络连接、读取服务器数据一直阻塞,而是希望网络连接、读取操作超过合理事件后,系统自定认为操作失败,即超时时长,提供了一个setToTimeout(int timeout)来设置超时时长 

     

    • 加入多线程 

      • 在服务端,为accept()方法产生的每个Socket创建一个单独的线程ServerThread(Socket socket)处理与客户端的通信 

      • 在客户端,为通信的Socket单独建立一个线程,通过连个Handler分别将接受服务器的消息发送给主线程,将主页面输入的信息发送到单独线程中;

  • 相关阅读:
    对于基础资料的关联操作
    单据关联关系记录
    单据转换插件中新增行
    APK签名校验绕过
    android 安全需要关注
    安卓从业者应该关注:Android 6.0的运行时权限
    让阿里云的Centos,PHP组件 ImageMagick支持png和jpeg格式
    cocos2d-x 常规库的图文件配置
    cocos2d-x 添加 libLocalStorage 库...
    cocos2d-x3.9 默认是 gnustl_static 配置,但是 这个库缺少c++的基础功能... c++_static 功能全面些
  • 原文地址:https://www.cnblogs.com/ghostll/p/3550076.html
Copyright © 2020-2023  润新知