版权声明:本篇文章由IT_CREATE整理 https://blog.csdn.net/IT_CREATE/article/details/83374749
第一部分代码:传输字符数据
客户端部分
package com.work.net.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 客户端
* @author Administrator
*
*/
public class MyClient {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建客户端 + 端口 (指定:我的数据从哪个端口出去)
DatagramSocket client = null;
DatagramPacket packet = null;
byte[] data = null;
try {
client = new DatagramSocket(6666);
//准备数据
String msg = "记得带好一点的酒哦!!!";
data = msg.getBytes();
//将数据打包 DatagramPacket + 服务器地址及端口号 来完成打包
packet = new DatagramPacket(data, data.length, new InetSocketAddress("127.0.0.1", 8888));
//发送
client.send(packet);
//释放资源
client.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务器部分
package com.work.net.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 服务器端
* @author Administrator
*
*/
public class MyServer {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建服务端 DatagramSocket类 + 端口(指定:我从哪个端口获取数据)
DatagramSocket server = null;
try {
server = new DatagramSocket(8888);
//准备接收数据 同样需要定义一个字节数组 work
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container, container.length);
while(true) {
//接收数据
server.receive(packet);//阻塞方法
//分析数据
byte[] data = packet.getData();//获得客户端传输的真实数据
System.out.println(new String(data));
}
//释放资源
//server.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第一部分代码:传输double类型数据
客户端部分
package com.work.net.udp;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* UDP客户端
*
* @author Administrator
*
*/
public class MyClient02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 创建客户端 + 端口 (指定:我的数据从哪个端口出去)
DatagramSocket client = null;
DatagramPacket packet = null;
byte[] data = null;
try {
client = new DatagramSocket(6666);
//准备数据
double nums = 100.55;
data = converter(nums);//将double值转换为byte[]
//将数据打包 DatagramPacket + 服务器地址及端口号 来完成打包
packet = new DatagramPacket(data, data.length, new InetSocketAddress("127.0.0.1", 8888));
//发送
client.send(packet);
//释放资源
client.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 使用数据流和字节数组流,完成double到byte[]数组的转换
* @param nums
* @return
* @throws IOException
*/
private static byte[] converter(double nums) throws IOException {
// TODO Auto-generated method stub
byte[] data = null;
//底层流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
//上层流
DataOutputStream dos = new DataOutputStream(bos);
dos.writeDouble(nums);
dos.flush();
//获取数据
data = bos.toByteArray();//通过底层字节数组流获取字节数据
bos.close();
return data;
}
}
服务器部分
package com.work.net.udp;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 服务器端
* @author Administrator
*
*/
public class MyServer02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建服务端 DatagramSocket类 + 端口(指定:我从哪个端口获取数据)
DatagramSocket server = null;
try {
server = new DatagramSocket(8888);
//准备接收数据 同样需要定义一个字节数组 封装DataGramPacket
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container, container.length);
while(true) {
//接收数据
server.receive(packet);//阻塞方法
//分析数据
byte[] data = packet.getData();//获得客户端传输的真实数据
double nums = converter(data);
System.out.println(nums);
}
//释放资源
//server.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 使用数据流和字节数组流,完成byte[]数组到double的转换
* @param data
* @return
* @throws IOException
*/
private static double converter(byte[] data) throws IOException {
// TODO Auto-generated method stub
ByteArrayInputStream bis = new ByteArrayInputStream(data);//定义底层流
DataInputStream dis = new DataInputStream(bis);//定义上层流
double nums = dis.readDouble();//通过上层流获取转换后的数据
bis.close();
return nums;
}
}
最后其他类似,都要转成字节数组进行数据传输