无论是TCP还是UDP通信,一定要在AndroidManifest.xml中添加如下代码 添加在 <application android:label="@string/app_name" 之前就行
<uses-permission android:name="android.permission.INTERNET"/>
TCP 协议的:
服务器端:
步骤1:调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定的端口上。
步骤2:调用accept(),监听连接请求,如果有客户端接入,则接受客户端的连接,返回一个通信的套接字
步骤3:调用Socket类的getOutputStream()和getInputStream获得输出和输入流,用来接收和发送数据
步骤4:关闭通信套接字
ServerSocket serverSocket = null;
try{ /// try catch 一定要有
serverSocket = new ServerSocket(5000);//指定监听端口为5000 端口号1024之后的用户可以自己用
Socket socket = serverSocket.accept(); //监听连接请求 如果监听不到会一直阻塞在这里
InputStream ins = socket.getInputStream(); //获取输入流
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); //获取输出流
ins.read(data); //data为自己分配的byte数组 如果接收不到数据会一直在这里阻塞
String sendStr = new String(data);
out.println(data);
out.flush();//将数据发出去
}catch(InterruptedIOException e){
//超时错误
e.printStackTrace();
//IO异常
}catch(IOException e){
//打印错误
e.printStackTrace();
}finally{
//判断是否初始化ServerSocket对象,如果初始化则关闭serverSocket
if(serverSocket != null){
try{
serverSocket.close();
}catch(IOException e){
e.printStackTrace();
}
}
客户端:
步骤1: 调用Socket()创建一个流套接字,并连接到服务器端
步骤2: 调用Socket类的getOutputStream()和getInputStream方法获取输入和输出流,开始网络数据的发送和接收
步骤3: 关闭通信套接字
示例代码:
try{
Socket socket = new Socket(192.168.1.125,5000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //生成输入流
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(out.getOutputStream)));
String msg = "hello world";
out.write(msg);//写入
out.flush();//刷新,发送
socket.close();
}catch(UnknownHostException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
UDP通信:
服务器端:
步骤1:调用DatagramSocket(in port)创建一个数据报套接字,并绑定到指定端口上
步骤2:调用DatagramPacket(byte[] buf,int length),建立一个字节数组以接收UDP包
步骤3:调用DatagramSocket类的receive(),接收UDP包
步骤4:关闭数据报套接字。
示例代码:
//接收的字节大小
byte [] msg = new byte[1000];
//实例化一个DatagramPacket类
DatagramPacket dp = new DatagramPacket(msg,msg.length);
//新建一个DatagramSocket类
DatagramSocket ds = null;
try{
//UDP服务器监听的端口
ds = new DatagramSocket(5000);
//准备接收数据
ds.receive(dp);
}catch(SocketException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
//如果 ds对象不为空,则关闭ds对象
if(ds != null){
ds.close();
}
}
UDP客户端的代码:
步骤1:调用DatagramSocket()创建一个数据包套接字
步骤2:调用DatagramPacket(byte【】 buf,int offfset,int length,IntentAddress address,int port),建立要发
送的数据包
步骤3: 调用DatagramSocket类的send()发送UDP包
步骤4: 关闭数据报套接字
示例代码如下:
//定义要发送的信息
String msg = "hello world"
//新建一个DatagramSocket 对象
DatagramSocket ds = null;
try{
// 初始化DatagramSocket()对象
ds = new DatagramSocket();
//初始化InetAddress对象
InetAddress serverAddr = InetAddress.getByName("127.0.0.1");
DatagramPacket dp;
//初始化DatagramPacket对象
dp = new DatagramPacket(msg.getBytes(),msg.length(),serverAddr,UDP_SERVER_PORT);
ds.send(dp);
}catch(SocketException e){
e.printStackTrace();
}catch(UnknownHostException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
if(ds != null){
ds.close();
}
}