Socket作为一种网络编程的接口,俗称“套接字”,通常用于描述IP地址和端口号,是一种用于通信的句柄。应用程序通常通过套接字向网络发出请求或响应网络请求。在安卓开发中,用于实现客户端与服务器之间的通信除了针对HTTP进行网络通信的方法之外,另外一种就是Socket网络编程了。
Socket通信一般可以分为两种:一种是基于TCP协议的可靠传输,另一种是基于UDP协议的不可靠传输。下面,我就以TCP协议为例来实现安卓应用程序中客户端与服务器端进行通信的过程。
创建两个项目分别为Service和Client用来表示服务器和客户端,在Service中创建一个SocketActivity的类,那么服务器实现TCP通信的关键代码可以描述如下:
class ServerThread extends Tread{
public void run{
//声明一个ServerSocket对象;
ServerSocket serversocket=null;
try{
//创建一个ServerSocket对象,并让这个对象在4567端口监听;
serversocket=new ServerSocket(4567);
//调用ServerSocket的accept()方法,接受客户端所发送的请求;
Socket socket=serversocket.accept();
//从Socket当中得到InputStream对象;
InputStream inputstream=socket.getInputStream();
byte buffer[]=new byte[1024*4];
int temp=0;
//从InputStream对象中读取客户端所发送的数据;
while((temp=inputstream.read(buffer))!=-1){
system.out.println(new String(buffer,0,temp));
}
}catch(IOException e){
e.printStackTrace();
}
finally{
try{
serversocket.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
在Client中创建一个TCPClient的类,客户端与服务器端进行通信的关键代码可以描述如下:
public class TCPClient{
public static void main(String args[]){
try{
//创建一个Socket对象,指定服务器端的IP地址和端口号;
Socket socket=new Socket("192.168.1.104",4567);
//使用InputStream读取硬盘上的文件;
InputStream inputstream=new FileInputStream("f://file/words.txt");
//从socket当中得到OutputStream;
OutputStream outputstream=socket.getOutputStream();
byte buffer[]=new byte[1024*4];
int temp=0;
//将InputStream当中的数据取出,并写入到OutputStream当中;
while((temp=inputstream.read(buffer))!=-1){
outputstream.write(buffer,0,temp);
}
outputstream.flush();
}catch(IOException e){
e.printStackTrace();
}
}
}