Android中基于TCP协议的网络通信
扫描二维码
随时随地手机看文章
一、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通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求。
二、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聊天室应用的实现,只了解这个是不够的,需要加上多线程的才能使代码变得完善。