一、DatagramSocket
DatagramSocket是使用UDP协议的Socket,它的作用是接收和发送数据包,但是它本身并不能产生IO流
1、创建DatagramSocket对象
DatagramSocket()
//创建一个数据包套接字,绑定到本机上任意一个可用的端口
DatagramSocket(DatagramSocketImpl)
//创建一个绑定的数据报套接字, 与指定的datagramsocketimpl相关(一般不使用)
DatagramSocket(SocketAddress)
//通过制定的套接字地址来创建一个数据包套接字
DatagramSocket(int)
//指定本地的一个端口,以此来创建数据包套接字
DatagramSocket(int, InetAddress)
//创建一个DatagramSocket对象,并绑定到指定的地址和端口上
2、接收和发送数据
发送数据
public void send(DatagramPacket p) throws IOException {.....}
接收数据
public synchronized void receive(DatagramPacket p) throws IOException {....}
3、相关方法
int getLocalPort() 返回绑定到本机套接字的端口
InetAddress getInetAddress 返回套接字的连接地址
void close() 关闭该数据报套接字
二、DatagramPacket
DatagramPacket相当于一个被邮寄的包裹,上面写着收货人的地址,包裹里是所要传递的数据
1、创建DatagramPacket对象
public DatagramPacket(byte[] buf,int length):以一个空数组来创建DatagramPacket对象,该对象的作用是接收DatagramSocket中的数据。相当于一个缓冲池的作用
public DatagramPacket(byte buf[], int offset, int length) {} :一一个空的数组来创建DatagramPacket对象,其中 int offset 代表偏移量,int length代表长度(也可以说是池子的容量)
public DatagramPacket(byte buf[], int offset, int length, InetAddress address, int port) { 。。。}:创建一个用于发送的DatagramPacket对象,指定发送buf数组中从offset开始,总共length个字节。
DatagramPacket(byte[] buf, int length, InetAddress addr, int port):以一个包含数据的数组来创建DatagramPacket对象,创建该DatagramPacket对象时还指定了IP地址和端口–这就决定了该数据报的目的地。
三、利用DatagramPacket和Datagramsocket简单实现服务器和客户端的通信
1、创建客户端
1) 创建客户端 DatagramSocket 类+指定端口
2)准备数据 字节数组
3) 打包 DatagramPacket +服务器地址 以及端口
4) 发送
5) 释放资源
2、服务器端
1)创建服务器 DatagramSocket 类+指定端口
2)准备接受的容器 字节数组 封装 DatagramPacket
3) 包接收资源
4) 分析
5) 释放资源
简单来说就是服务器先挖一个DatagramPacket的邮箱,时刻准备着接受邮件,客户端这边准备好所要邮寄的东西,写好所要邮寄的地址(DatagramPacket+服务器地址+端口)不然邮递员不知道把邮件往那发送。
代码实现:
服务器端:
package Internet;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDP_chat {
public static void main(String[] args) throws IOException {
//1、 构件服务端 +端口
DatagramSocket server=new DatagramSocket(8888);
//2、封装成包 DatagramPacket(byte[] buf,int lenth) 相当于构建接受池
byte[] container=new byte[1024];
DatagramPacket datagramPacket=new DatagramPacket(container, container.length);
//接收客户端发来的数据
server.receive(datagramPacket);
//获取接收到的数据
byte [] data=datagramPacket.getData();
//获取接收到的数据的长度
int len=datagramPacket.getLength();
//输出相关的信息
System.out.println(new String(data,0,len));
//关闭接收流
server.close();
}
}
客户端:
package Internet;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class Udp_chat_client {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket=new DatagramSocket(9999);
String meString="扬弟弟";
byte[] bs=meString.getBytes();
DatagramPacket datagramPacket=new DatagramPacket(bs, bs.length,new InetSocketAddress("localhost",8888));
datagramSocket.send(datagramPacket);
datagramSocket.close();
}
}
实现结果:
扬弟弟
今天的文章java socket dataoutputstream_java编译分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/70383.html