Android 网络应用——基于TCP协议的Socket通信简要介绍

一、TCP协议的Socket编程简介

  TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信了。Java对基于TCP协议的网络通信提供了良好的封装,Java使用Socket对象来代表两端的通信接口,并通过Socket产生IO流来进行网络通信。一图胜千言,请看下图介绍


Alt


  位于通信两端的Socket属于C/S架构,一个作为连接发起者(Initiator)另外一个连接侦听者(Listener),通常将从事侦听的Socket称作“服务器”,将发起连接的Socket称作“客户端”。上图中的左边是Clinet,右边是Server。它们的生命周期大致如下:

Client生命周期
  1. 创建socket
  2. 绑定地址
  3. 发起连接
  4. 关闭连接
Server生命周期
  1. 创建socket
  2. 绑定(bind)地址端口
  3. 监听网络连接
  4. 接受连接
  5. 关闭连接


二、Android实现Socket的通信

我们在基本了解Socket通信的大致过程和基本概览后下面开始介绍如何在Android上实现它:

1.使用ServerSocket创建TCP服务器端

  因为在两个通信实体没有建立虚拟链路之前,必须要有一个通信实体先做出主动姿态,主动接收来自其他通信实体的连接请求,所以我们要先创建一个TCP服务器端来接收连接请求。

  Java中能接收其他通信实体连接请求的是ServerSocketServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状态。ServerSocket包含一个监听来自客户端请求的方法。

  • Socket accept():如果接收到一个客户端Socket的连接请求,该方法将返回一个与连接客户端Socket对应的Socket;否则该方法将一直处于等待状态,线程也被阻塞。

  为了创建ServerSocket对象,ServerSocket类提供了一下几个构造方法:

  • ServerSocket(int port):用指定的端口port来创建一个ServerSocket。该端口应该有一个有效的端口整数值0~65535
  • ServerSocket(int port,int backlog):增加一个用来改变连接队列长度的参数backlog
  • ServerSocket(int port,int backlog,InetAddress localAddr):在机器存在多个IP地址的情况下,通过localAddr这个参数来指定将ServerSocket绑定到指定的IP地址。

  在ServerSocket使用完毕后,应使用ServerSocketclose()方法来关闭该ServerSocket。在通常情况下,服务器不应该只接受一个客户端请求,而应该不断地接收来自客户端的所有请求,所以Java程序通常会通过循环不断地调用ServerSocketaccept()方法,如以下代码片段所示:

 	//创建一个ServerSocket,用于监听客户端的Socket请求
    ServerSocket ss=new ServerSocket(30000 );
    //采用循环不断接受来自客户端的请求
    while (true){
    //每当接收到客户端Socket的请求时,服务器端也对应产生一个Socket
    Socket s=ss.accept();
    //下面就可以使用Socket进行通信了...

2.使用Socket进行通信

  客户端通常可以使用Socket的构造器来连接到指定服务器,Socket通常可提供如下两个构造器。

  • Socket(inetAddress/String remoteAddress,int port)创建连接到指定远程主机、远程端口的Socket,该构造器没有指定本地地址、本地端口,默认使用本地主机的默认IP地址,默认使用系统动态分配的端口
  • Socket(inetAddress/String remoteAddress,int port,InetAddress localAddr,int localPort):创建连接到指定远程主机、远程端口的Socket,并指定本地IP地址和本地端口,适用于本地主机有多个IP地址的情形。


  当本地主机只有一个IP地址时,使用第一个方法更为简单,如以下代码所示:

    //创建连接到10.34.87.82、30000端口的Socket
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值