基于UDP协议的Socket简单实例
使用两个类 DatagramPacket -- 表示数据报包
DatagramSocket -- 表示进行端到端的通信类
服务端四步
1、定义服务端IP 端口 数据内容
2、创建DategramPacket 数据包对象 将其包含数据内容
3、创建DategramSocket 对象
4、socket.send() 进行发送;
UdpSocketServer 代码
package com.chen.study.socket.socketServer;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UdpSocketServer {
private static int port = 12000;
/**
* UDPsocket服务
*/
public static void UdpSocketServer(){
try {
//1.创建服务端口
DatagramSocket socket = new DatagramSocket(port);
System.out.println("UDPsocket已经启动.....");
//2.创建数据报,用于接收客户端的发送数据
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
//3.接受客户端请求
socket.receive(packet);//此方法在接收到数据前一直处于阻塞状态
//4.读取数据
String info = new String(data, 0,packet.getLength());
System.out.println("我是服务器,客户端说:"+info);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
UdpSocketServer();
}
}
客户端
1.获取 IP 地址与 端口号 InetAddress inetaddress
2.创建数据报
3.创建Socket
4.发送 Socket.send(DatagramPacket packet)
客户端代码 写道
package com.chen.study.socket.socketServer;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UdpSocketClient {
private static int port = 12000;
private static String ip = "192.168.119.35";
public static void UdpSocketClient(){
try {
byte[] data = "服务端你好!".getBytes();
System.out.println("客户端发送:"+"服务端你好!");
InetAddress inetaddress = InetAddress.getByName(ip);
//创建数据报
DatagramPacket packet = new DatagramPacket(data, data.length, inetaddress, port);
//创建Socket
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
UdpSocketClient();
}
}
附:
String info = new String (date,0,packet.getLength());
String构造方法
public String(byte[] bytes,
int offset,
int length)
bytes - 要解码为字符的 byte
offset - 要解码的第一个 byte 的索引
length - 要解码的 byte 数