服务端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ServerSocket {
public static final int PORT = 30009;
// 定义每个数据报的最大大小为4K
private static final int DATA_LEN = 4096;
// 定义该服务器使用的DatagramSocket
private DatagramSocket socket = null;
// 定义接收网络数据的字节数组
byte[] inBuff = new byte[DATA_LEN];
// 以指定字节数组创建准备接受数据的DatagramPacket对象
private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);
// 定义一个用于发送的DatagramPacket对象
private DatagramPacket outPacket;
// 定义一个字符串数组,服务器发送该数组的的元素
String[] books = new String[] { "轻量级J2EE企业应用实战", "基于J2EE的Ajax宝典",
"Struts2权威指南", "ROR敏捷开发最佳实践" };
public void init() throws IOException {
try {
// 创建DatagramSocket对象
socket = new DatagramSocket(PORT);
// 采用循环接受数据
for (int i = 0; i < 1000; i++) {
// 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。
socket.receive(inPacket);
// 判断inPacket.getData()和inBuff是否是同一个数组
System.out.println(inBuff == inPacket.getData());
// 将接收到的内容转成字符串后输出
String result=new String(inBuff, 0, inPacket.getLength());
byte[] sendData=null;
if(result.equals("1")){
sendData="TAOZHANGYI".getBytes();
}else if(result.equals("2"))
{
sendData="LIUWENLING".getBytes();
}else if(result.equals("3"))
{
sendData="JIANGXUYUN".getBytes();
}else
{
sendData="陶章义".getBytes();
}
// 从字符串数组中取出一个元素作为发送的数据
// byte[] sendData = books[i % 4].getBytes();
// 以指定字节数组作为发送数据、以刚接受到的DatagramPacket的
// 源SocketAddress作为目标SocketAddress创建DatagramPacket。
outPacket = new DatagramPacket(sendData, sendData.length,
inPacket.getSocketAddress());
System.out.println("sendData:"+sendData+"******"+"sendData.length:"+sendData.length+"*********"+"inPacket.getSocketAddress:"+inPacket.getSocketAddress());
// 发送数据
socket.send(outPacket);
}
} catch (Exception e) {
System.out.println(e.toString());
} finally //使用finally块保证关闭资源
{
if (socket != null) {
socket.close();
}
}
}
public static void main(String[] args) {
try {
new ServerSocket().init();
} catch (Exception e) {
}
}
客户端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class UdpClient {
public static final int DEST_PORT = 30009;
public static final String DEST_IP = "127.0.0.1";
private static final int DATA_LEN = 4096;
private DatagramSocket socket = null;
byte[] inBuff = new byte[DATA_LEN];
private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length); //接收数据包
private DatagramPacket outPacket = null;
public void init()throws IOException{
try {
socket = new DatagramSocket();
outPacket = new DatagramPacket(new byte[0] , 0 ,InetAddress.getByName(DEST_IP) , DEST_PORT); //发送数据包
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine()){
byte[] buff = scan.nextLine().getBytes();
outPacket.setData(buff);
socket.send(outPacket); //发送
socket.receive(inPacket); //接收
System.out.println("***"+new String(inBuff ,0, inPacket.getLength())); //解析接收的数据
}
} catch (Exception e) {
}finally
{
if (socket != null){socket.close();}
}
}
public static void main(String[] args) {
try {
new UdpClient().init();
} catch (Exception e) {
// TODO: handle exception
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ServerSocket {
public static final int PORT = 30009;
// 定义每个数据报的最大大小为4K
private static final int DATA_LEN = 4096;
// 定义该服务器使用的DatagramSocket
private DatagramSocket socket = null;
// 定义接收网络数据的字节数组
byte[] inBuff = new byte[DATA_LEN];
// 以指定字节数组创建准备接受数据的DatagramPacket对象
private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);
// 定义一个用于发送的DatagramPacket对象
private DatagramPacket outPacket;
// 定义一个字符串数组,服务器发送该数组的的元素
String[] books = new String[] { "轻量级J2EE企业应用实战", "基于J2EE的Ajax宝典",
"Struts2权威指南", "ROR敏捷开发最佳实践" };
public void init() throws IOException {
try {
// 创建DatagramSocket对象
socket = new DatagramSocket(PORT);
// 采用循环接受数据
for (int i = 0; i < 1000; i++) {
// 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。
socket.receive(inPacket);
// 判断inPacket.getData()和inBuff是否是同一个数组
System.out.println(inBuff == inPacket.getData());
// 将接收到的内容转成字符串后输出
String result=new String(inBuff, 0, inPacket.getLength());
byte[] sendData=null;
if(result.equals("1")){
sendData="TAOZHANGYI".getBytes();
}else if(result.equals("2"))
{
sendData="LIUWENLING".getBytes();
}else if(result.equals("3"))
{
sendData="JIANGXUYUN".getBytes();
}else
{
sendData="陶章义".getBytes();
}
// 从字符串数组中取出一个元素作为发送的数据
// byte[] sendData = books[i % 4].getBytes();
// 以指定字节数组作为发送数据、以刚接受到的DatagramPacket的
// 源SocketAddress作为目标SocketAddress创建DatagramPacket。
outPacket = new DatagramPacket(sendData, sendData.length,
inPacket.getSocketAddress());
System.out.println("sendData:"+sendData+"******"+"sendData.length:"+sendData.length+"*********"+"inPacket.getSocketAddress:"+inPacket.getSocketAddress());
// 发送数据
socket.send(outPacket);
}
} catch (Exception e) {
System.out.println(e.toString());
} finally //使用finally块保证关闭资源
{
if (socket != null) {
socket.close();
}
}
}
public static void main(String[] args) {
try {
new ServerSocket().init();
} catch (Exception e) {
}
}
客户端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class UdpClient {
public static final int DEST_PORT = 30009;
public static final String DEST_IP = "127.0.0.1";
private static final int DATA_LEN = 4096;
private DatagramSocket socket = null;
byte[] inBuff = new byte[DATA_LEN];
private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length); //接收数据包
private DatagramPacket outPacket = null;
public void init()throws IOException{
try {
socket = new DatagramSocket();
outPacket = new DatagramPacket(new byte[0] , 0 ,InetAddress.getByName(DEST_IP) , DEST_PORT); //发送数据包
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine()){
byte[] buff = scan.nextLine().getBytes();
outPacket.setData(buff);
socket.send(outPacket); //发送
socket.receive(inPacket); //接收
System.out.println("***"+new String(inBuff ,0, inPacket.getLength())); //解析接收的数据
}
} catch (Exception e) {
}finally
{
if (socket != null){socket.close();}
}
}
public static void main(String[] args) {
try {
new UdpClient().init();
} catch (Exception e) {
// TODO: handle exception
}
}