Hi,欢迎来到中国嵌入式培训高端品牌 - 华清远见嵌入式学院<北京总部官网>,专注嵌入式工程师培养15年!
当前位置: > 嵌入式学院 > 嵌入式学习 > 讲师博文 > Android中基于TCP协议的网络通信
Android中基于TCP协议的网络通信
时间:2017-02-15作者:华清远见

一、Android网络简介

Android与服务器的通信方式主要有两种,一种是Http通信,另一种是Socket通信。

HTTP通信:Android中内置HttpClient,这样可以发方便的发送Http请求并获取Http响应,简化了与网站之间的交互。

Socket通信:Android还支持JDK本身的TCP、UDP网络通信的API,可以使用Java中提供的ServerSocket、Socket类,来建立基于TCP/IP协议的网络通信。(本章主要讲解TCP协议编程的相关内容)也可以使用DatagramSocket、Datagrampacket、MulticastSocket来建立基于UDP协议的网络通信。

两者的区别:两者的最大差异在于,Http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求。

本文引用地址:http://www.embedu.org/Column/7502.html

二、TCP协议基础

TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端形成网络虚拟链路。Java使用Socket对象来代表两端的通信接口,并通过Socket产生IO流来进行通信。

IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议。通过使用IP协议,使Internet成为一个允许连接不同类型的计算机和不同操作系统的网络。

要使两台计算机彼此之间进行通信,必须使两台计算机使用同一种“语言”,IP协议只保证计算机能发送和接收分组数据。IP协议负责将消息从一个主机传送到另一个主机,消息在传送的过程中被分割成一个个小包。

TCP协议被称作一种端对端协议,这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接:用于发送和接收数据的虚拟链路。

通过这种重发机制,TCP协议向应用程序提供可靠地通信连接,使它能够自动适应网上的各种变化,即使在Internet暂时出现堵塞的情况下,TCP也能够保证通信的可靠。

虽然IP和TCP这两个协议的功能不尽相同,也可以分开单独使用,但它们是在同一时期作为一个协议来设计的,并且在功能上也是互补的,只有两者结合,才能保证Internet在复杂的环境下正常运行,凡是要连接到Internet的计算机,都必须同时安装和使用这两个协议,因此在实际中常把这两个协议统称为TCP/IP协议。

三、如何使用ServerSocket创建TCP服务器端:

Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,若没有连接则它将一直处于等待状态。其中监听来自客户端请求的方法:Socket accept()。该方法若收到一个客户端Socket的连接请求,该方法将返回一个与连接客户端Socket对应的Socket,否则将阻塞等待。代码如:

ServerSocket socket = new ServerSocket(21300);

While(true){

Socket s = socket.accept();

}

四、使用Socket进行通信

客户端经常使用Socket来连接到指定服务器,Socket类提供构造器连接到指定远程主机和远程端口的构造器,如:

Socket socket = new Socket(“192.168.1.11”,8000);

创建完毕Socket之后就可以进行通信了。Socket提供了InputStream getInputStream()和OutputStream getOutputStream两个方法来获取输入流和输出流进行数据的读写操作。例如:

while(true){

Socket socket = serversocket.accept();

OutputStream os = socket.getOutputStream();

os.write(“你好,我是服务器”.getBytes(“utf-8”));

os.close();

socket.close();

}

此时,就可以进行服务器与客户端的读写操作了。但是考虑到简单C/S聊天室应用的实现,只了解这个是不够的,需要加上多线程的才能使代码变得完善。


发表评论

全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966

在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497)

企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300)

Copyright 2004-2018 华清远见教育集团 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号