Android 中使用TCP、UDP协议
来源:互联网 发布:windows 95iso下载 编辑:程序博客网 时间:2024/06/08 13:13
使用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://blog.etongwl.com/?p=608
更多内容:http://blog.etongwl.com/- Android 中使用TCP、UDP协议
- Android中使用TCP和UDP
- 22java中使用UDP TCP 协议做聊天工具
- Android中的TCP协议与UDP协议
- DNS使用UDP协议还是TCP协议
- 聊聊iOS中TCP / UDP 协议
- DNS使用TCP还是UDP协议
- 在android中如何使用UDP和TCP传输
- GSM模块_GPRS网络中使用TCP协议比使用UDP有何优势
- TCP/IP协议族中tcp与udp的区别
- Android TCP协议与UDP协议的实现
- DNS使用的是TCP协议还是UDP协议
- DNS使用的是TCP协议还是UDP协议
- DNS使用的是TCP协议还是UDP协议?
- DNS使用的是TCP协议还是UDP协议
- DNS使用的是TCP协议还是UDP协议
- DNS使用的是TCP协议还是UDP协议
- DNS域名解析使用的是TCP协议还是UDP协议?
- 放遗忘笔记:mac osx 10.10 下编译 sphinx4 纪录
- iOS 序列化和反序列化
- Android中自己设置一些记号(tag)
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- 泛化物品
- Android 中使用TCP、UDP协议
- Python标准库:内置函数iter(object[, sentinel])
- stl string常用函数
- Oracle Sequence中Cache与NoCache的区别
- 完数据库后JOB不执行问题处理
- 北京名表维修中心
- 守护进程
- 如何用微信管理员工、管理团队
- [leetcode]Palindrome Partitioning II