这个是第一篇,我先写udp,
首先我解释一下这个的特点是什么,他的特点主要是:
我发送消息之后就不管这个消息的任何情况,也就是,我只要把这个消息发送出去就不管了
这个是大白话的解释,具体的就是消息效率高,不可靠,主要应用场景是语音和视频通话,因为这个udp发送消息是以包的形式发送的,并且一个包的具体大小是64kb,并且不回超过 这个64kb
//下面我来演示意思具体的java代码是怎么写的
//首页得准备两个包,一个是客户端 一个是服务器端,准备两个,由于我是一台电脑,这样就不用考虑ip地址了,那我先一个怎么获取本机ip地址和本机的主机名字
java
package clien;
import java.net.InetAddress;
public class indetAddress {
public static void main(String[] args) throws Exception {
//获取ip地址
InetAddress localHost = InetAddress.getLocalHost();
String hostAddress = localHost.getHostAddress();
System.out.println("ip地址"+hostAddress);
String hostName = localHost.getHostName();
System.out.println("主机名:"+hostName);
}
}
好,我现在来写客户端和服务器端,我写截一个图这样看着方便
那我写代码客户端
java
package clien;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
/**
* 客户端
*/
public class ClientSocket {
public static void main(String[] args) throws Exception {
//创建客户端
DatagramSocket datagramSocket = new DatagramSocket();
//创建发消息的容器
//byte buf[], //创建字节数组
//int length, //数据的长度
//InetAddress address, //ip地址
//int port //端口号
byte[] bytes = "你好服务端".getBytes(StandardCharsets.UTF_8);
DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length,InetAddress.getLocalHost(),9999);
//发送消息
datagramSocket.send(datagramPacket);
System.out.println("客户端发送成功");
//关闭释放资源
datagramSocket.close();
}
}
在写服务器端
java
package server;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 服务器端
*/
public class ServerSocket {
public static void main(String[] args) throws Exception{
//创建服务器端
DatagramSocket datagramSocket = new DatagramSocket(9999);
//byte buf[], int length,
//用于接受
byte[] bytes=new byte[1024*64]; //最大不会超过64kb
DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);
System.out.println("服务开启");
//要显示数据 拿到数据
datagramSocket.receive(datagramPacket);
//这个是拿到数据的长度
int length = datagramPacket.getLength();
//这个是显示的数据
String data = new String(bytes, 0, length);
//获取客户端的ip地址
String hostAddress = datagramPacket.getAddress().getHostAddress();
//获取客户端的名字
String hostName = datagramPacket.getAddress().getHostName();
System.out.println("客服端发送过的数据:"+data+"\n数据长度:"+length+"\n客户端的ip地址:"+hostAddress+"\n客户端的名字:"+hostName);
datagramSocket.close();
}
}
好了,我先写这么多,后面还有tcp,等我回头发布