Android · 2015年1月26日 0

Android 中使用TCP、UDP协议

使用TCP通信服务器步骤
1、调用ServerSocket(int port) 创建一个ServerSocket,并绑定到指定端口上
2、调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字
3、调用Socket的getInputStream()和getOutputStream()获得输入和输出流,开始网络数据的发送和接收。
4、关闭通信套接字。
例如:
//创建一个ServerSocket
ServerSocket serverSocket=null;
try{
//TCP_SERVER_PORT为指定的绑定端口,为into类型
serverSocket=new ServerSocket(TCP_SERVER_PORT);
//监听连接请求
Socket socket=serverSocket.accept();
//写入读Buffer中
BufferReader in=new BufferReader(
//获得输入流
new InputStreamReader(socket.getInputStream())
);
//放到写Buffer中
BufferWriter out=new BufferWriter(new OutputStreamWriter(socket.getOutputStream()));
//读取接收信息,转换为字符串
String incomingMsg=in.readerLine()+System.getProperty(“line.separator”);
//生成发送字符串
String outGoingMsg=”goodbye from port “+TCP_SERVER+PORT+System.getProperty(“line.separator”);
//将发送字符串写入上面定义的BufferWriter中
out.write(outGoingMsg);
//刷新 发送
out.flush();
//关闭
socket.close();
}catch(InterruptedIOException e){
//超时错误
e.printStackTrace();
}catch(IOException e){//IO异常
e.printStackTrace();
}finally{//判定是否初始化ServerSocket对象,如果初始化则关闭ServerSocket
if(serverSocket!=null){
try{
serverSocket.close();
}catch(IOExcetion e){
e.printStackTrace();
}
}

}
使用TCP通信客户端步骤
1、调用Socket()创建一个Socket(套接字),并绑定到指定服务端口上。
2、调用Socket的getInputStream()和getOutputStream()获得输入和输出流,开始网络数据的发送和接收。
3、关闭通信套接字。
例如:
try{
//初始化Socket,TCP_SERVER_PORT为指定的服务器端口(int类型)
Socket socket=new Socket(“Ip/website”,TCP_SERVER_PORT);
//获得输入流
BufferReader in=new BufferReader(new InputStreamReader(socket.getInputStream()));
//生成输出流
BufferWriter out=new BufferWriter(new OutputStreamWriter(socket.getOutputStream()));
//生成发送字符串
String outGoingMsg=”goodbye from port “+TCP_SERVER+PORT+System.getProperty(“line.separator”);
//将发送字符串写入上面定义的BufferWriter中
out.write(outGoingMsg);
//刷新 发送
out.flush();
//读取接收信息,转换为字符串
String incomingMsg=in.readerLine()+System.getProperty(“line.separator”);
//关闭
socket.close();
}catch(UnknownHostException e){
//超时错误
e.printStackTrace();
}catch(IOException e){//IO异常
e.printStackTrace();
}
使用UDP通信服务器步骤
1、调用DatagramSocket(int port) 创建一个数据报套接字,并绑定到指定端口上
2、调用DatagramPacket(byte[] buf,int length),建立一个字节数组以接收UDP包。
3、调用DatagramSocket的receive(),接受UDP包。
4、关闭数据报套接字。
例如:
//接收的字节大小,客户端发送的数据不能超过MAX_UDP_DATAGRAM_LEN
byte[] lMsg=new byte[MAX_UDP_DATAGRAM_LEN];
//实例化一个DatagramPacket
DatagramPacket dp=new DatagramPacket(lMsg,lMsg.length);
//创建一个DatagramSocket
DatagramSocket ds=null;
try{
//UDP_SERVER_PORT为指定的绑定端口,为into类型
ds=new DatagramSocket(UDP_SERVER_PORT);
//准备接收数据
ds.receive(dp);
}catch(SocketException e){
//超时错误
e.printStackTrace();
}catch(IOException e){//IO异常
e.printStackTrace();
}finally{//如果ds对象不为空,则关闭ds对象
if(ds!=null){
ds.close();
}

}
使用UDP通信客户端步骤
1、调用DatagramSocket()创建一个数据报套接字。
2、调用DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port),建立要发送的UDP包
3、调用DatagramSocket的send()发送UDP包
4、关闭数据报套接字。
例如:
//定义要发送的信息
String udpMsg=”hello world from UDP client “+UDP_SERVER_PORT;
//新建一个DataGramSocket对象
DatagramSocket ds=null;
try{
//初始化DatagramSocket
ds=new DatagramSocket();
//初始化InetAddress 对象
InetAddress serverAddress=InetAddress.getByName(“127.0.0.1”);
DatagramPacket dp;
//初始化DatagramPacket对象
dp=new DatagramPacket(udpMsg.getBytes(),udpMsg.length(),serverAddress,UDP_SERVER_PORT);
//发送
ds.send(dp);
//获得输入流
}catch(SocketException e){
e.printStackTrace();
}catch(UnknownHostException e){
e.printStackTrace();
}catch(IOException e){//IO异常
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
//如果DatagramSocket已经实例化,需要关闭
if(ds!=null){
ds.close();
}
}

转发注明来源:http://www.etongwl.com/?p=608

Share this: