java
package Ntework;
/**
* Socket编程,UDP编程,DatagramSocket,DatagramPacket
* UDP编程
* 需求:完成在线咨询功能:学生和咨询师在线一对一交流
* 分析:使用基于UDP协议的Socket网络编程实现
* 不需要利用IO流实现数据的传输
* 每个数据发送单元被统一封装成数据包的方式,发送方将数据包发送到网络中,数据包在
* 网络中去寻找他的目的地。
* UDP基本概念
* DatagramSocket:用于发送或接收数据包的套接字
* DatagramPacket:数据包
* @author pmc
*
*/
public class SocketTest {
}
模拟客户端-发送端
package Ntework;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 基本流程
* 发送端
* 1.使用DatagramSocket创建发送端,指定端口
* 2.准备数据转成字节数组
* 3.分装成DatagramPacket包裹,需要指定目的地
* 4.发送包裹send(DatagramPacket p)
* 5.释放资源
*
* 同一个协议下端口不允许冲突
* @author pmc
*
*/
public class UdpClient {
public static void main(String[] args) throws IOException{
System.out.println("发送方启动中...");
//使用DatagramSocket指定端口创建发送端
DatagramSocket client=new DatagramSocket(8881);
//准备数据转字节数组
String data="我是客户端信息";
byte[] datas=data.getBytes();
//封装成DatagramPacket包裹,需要指定目的地
DatagramPacket packet=new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",9990));
//发送包裹send(DatagramPacket p)
client.send(packet);
//释放资源
client.close();
}
}
模拟服务端-接收端
package Ntework;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 基本流程
* 接收端
* Address already in user:Cannot bind 同一个协议下端口不允许冲突
* 1.使用DatagramSocket创建接收端,指定端口
* 2.准备容器封装成DatagramPacket包裹
* 3.阻塞式接收包裹receive(DatagramPacket p)
* 4.分析数据byte[] getData()/getLength()
* 5.释放资源
* @author pmc
*
*/
public class UdpServer {
public static void main(String[] args) throws IOException{
System.out.println("接收方启动中...");
//使用DatagramSocket指定端口创建发送端
DatagramSocket server=new DatagramSocket(9990);
//准备容器 封装成DatagramPacket包裹
byte[] container=new byte[1024*60];
DatagramPacket packet=new DatagramPacket(container,0,container.length);
//阻塞式接收包裹receive(DatagramPacket p)
server.receive(packet);
//分析数据 byte[] getData()/getLength()
byte[] datas=packet.getData();
int len=packet.getLength();
System.out.println(new String(datas,0,len));
//释放资源
server.close();
}
}