对于做javaweb的人来说,网络编程这一块的知识接触的比较少,但它其实十分重要。从今天开始重新学习这一块的内容。
socket是插槽的意思,计算机通过网线连接,连接处就是一个槽。java中就是用这个槽的命名这些用于网络通信的类。其中,用于支持UDP协议最为简单,所以直接上代码:
发送方:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* @author zhoutian
* @date 2019/6/8 15:41
*/
public class UDPSend {
public static void main(String[] args) throws IOException {
// 创建一个UDP对应的socket类
DatagramSocket socket = new DatagramSocket();
// 要发送的内容
String data = "东窑 东窑 我是洞悉 我是洞悉!!!";
// 要发送的数据包,它就像一个邮件,构造参数需要放入你的要寄的东西、东西的长度、要送达的地址以及详细的门牌号
DatagramPacket packet = new DatagramPacket(data.getBytes(),data.length(),InetAddress.getByName("192.168.0.255"),1025); //0是网络段,255是广播地址
// 发送数据
socket.send(packet);
//关闭
socket.close();
}
}
接收方:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/**
* @author zhoutian
* @date 2019/6/8 15:41
*/
public class UDPReceive {
public static void main(String[] args) throws IOException {
// 创建UDP的socket对象,需要注意的是,你需要指定socket监听的端口号,以便客户端能够确定你的门牌号,如果不指定,让系统随机分配,客户端就傻啦。快递员也不是侦探,他会找不到你具体地址
DatagramSocket socket = new DatagramSocket(1025);
// 创建一个空包,用来接收客户端发来的数据
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf,buf.length);
// 调用接收方法,用一个空包为参数,表示让它把货卸下来后,放到我准备的空包里。
socket.receive(packet);
// 就这么简单我可以得到客户端发来的数据,并打印他们。
String ip = packet.getAddress().getHostAddress();
String data = new String(packet.getData(),0,packet.getLength());
int port = packet.getPort();
System.out.println(ip +"::"+ data +"::"+ port);
// 关闭连接
socket.close();
}
}
为什么说他简单呢?因为UDP是不用建立连接的,他酷似一个不负责的快递员,当他没有找到你的邮件上写的地址时,他会毫不犹豫的把你的包裹扔掉。真是人渣啊,我只能说他是最不靠谱的协议啦。但这并不代表他一无是处,毕竟人渣也有爱国的嘛。
好了,代码很简单,学习不用操之过急,看是看不会的,敲几遍才会有感觉。