前言
网络编程三要素:IP,端口号,协议
IP:每个设备在网络中的唯一标识,每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。
端口号: 每个程序在设备上的唯一标识,每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。端口号范围从0-65535。编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。
协议:为计算机网络中进行数据交换而建立的规则、标准或约定的集合;
UDP:面向无连接,数据不安全,速度快。不区分客户端与服务端。
TCP:面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
UDP传输
udp传输不区分服务端和客户端,通过DatagramSocket的send和receive方法确定发送端和接收端;
发送端(Send)
主要分一下步骤:
1,创建DatagramSocket, 随机端口号
2,创建DatagramPacket, 指定数据, 长度, 地址, 端口
3,使用DatagramSocket发送DatagramPacket
4,关闭DatagramSocket
public class Send {
public static void main(String[] args) throws IOException {
send1();
}
private static void send1() throws SocketException, UnknownHostException, IOException {
Scanner s = new Scanner(System.in);
DatagramSocket socket = new DatagramSocket(); //随机端口号
while(true) {
String data= s.nextLine();
byte[] b = data.getBytes();
if("拜拜".equals(data)) {
break;
}
DatagramPacket packet = new DatagramPacket(b, b.length,InetAddress.getByName("127.0.0.1"), 8888);
socket.send(packet);
}
socket.close();
}
}
接收端
1,创建DatagramSocket, 必须要指定一个端口
2,创建DatagramPacket, 指定数组, 长度
3,使用DatagramSocket接收DatagramPacket
4,从DatagramPacket中获取数据
5,关闭DatagramSocket
public class Receive {
public static void main(String[] args) throws IOException {
receve1();
}
private static void receve1() throws SocketException, IOException {
DatagramSocket socket = new DatagramSocket(8888);
DatagramPacket packet = new DatagramPacket(new byte[64],64);
while(true) {
socket.receive(packet);
byte[] re=packet.getData();
System.out.println(new String(re,0,packet.getLength()));
}
}
}