Socket编程
www.mars-droid.com
1 什么是Socket
Android使用的是Java的Socket模型
Socket原意插座 通常称作“套接字” 用于描述IP地址和端口,是一个通信链的句柄
应用程序通过“套接字”向网络发出请求火应答网络请求
2 Socket基本通信模型
客户端(Socket) 输出流 OutputStream ---> 服务端(ServerSocket) 输出流 InputStream
服务端(ServerSocket) 输出流 OutputStream ---> 客户端(Socket) 输入流 InputStream
3 使用基于TCP协议的Socket
*ServerThread extends Thread的run方法 服务器端代码
声明一个ServerSocket对象 监听指定端口
ServerSocket serverSocket=new ServerSocket(端口);
调用serverSocket的accept方法,接受客户端所发送的请求
Socket socket=serverSocket.accept();//返回一个socket 代表一个连接
从socket中得到InputStream对象
InputStream inputStream=socket.getInputStream();
byte buffer[]=new byte[1024*4];
int temp=0;
从InputStream读取数据
while((temp=inputStream.read(buffer))!=-1){
Syestem.out.println(new String(buffer,0,temp));
}
*客户端代码
创建一个Socket对象,指定服务器端IP地址和端口
Socket socket=new Socket("ip地址",端口);
使用InputStream读取一个文件
InputStream inputStream=new FileInputStream("文件路径");
从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();
4 使用基于UDP协议的Socket
*服务器端代码
创建一个DatagramSocket对象,指定端口号
DatagramSocket socket=new DatagramSocket(端口);
byte data[]=new byte[1024];
创建一个空的DatagramPacket对象 用于接受数据
DatagramPacket packet=new DatagramPacket(data,data.length);
使用receive方法接受客户端发送的数据(有些类似于accept 也是阻塞的)
socket.receive(packet);
System.out.println(new String(packet.getData(),packet.getOffset(),packet.getLength()));
*客户端代码
创建一个DatagramSocket对象
DatagramSocket socket=new DatagramSocket(端口);
创建一个InetAddress 代表网络中的一个地址
InetAddress serverAddress=InetAddress.getByName("IP");
String str="hello";
byte data[]=str.getBytes();
创建DatagramPacket对象 指定发送的地址和端口号
DatagramPacket packet=new DatagramPacket(data,data.length,serverAddress,端口);
调用socket对象的send方法,发送数据
socket.send(packet);