网络通讯的三要素:
1.IP地址:InetAddress 网络中设备的标识
本地回环地址:127.0.0.1 主机名:localhost
2.端口号
用于标识进程的逻辑地址,不同进程的标识
有效端口:0~65535,其中0~1024是系统使用或保留端口。
3.传输协议
通讯的规则,常见的协议有TCP、UDP。
UDP的作用:将数据及源和目的封装成数据包中,不需要建立链接,每个数据报上网大小在限制在64k内,因无连接,是不可靠协议,不需要建立连接,速度快。
TCP的作用:建立连接,形成传输数据的通道。在连接中进行大数据量的传输,通过三次握手完成连接,是可靠协议,必须建立连接,所以效率稍低。
三次握手类似打电话:
发送端:你在吗?
接收端:在,你可以发送数据。
发送端:那我开始发送数据了。
UDP传输
udp发送端代码:
1 package chuanzhiBlog; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 import java.net.SocketException; 8 import java.net.UnknownHostException; 9 10 public class UDPSendDemo { 11 12 public static void main(String[] args) throws IOException { 13 // TODO Auto-generated method stub 14 /* 15 * 需求:建立udp的发送端 16 * 思路: 17 * 1.建立可以实现udp传输的socket服务。 18 * 2.明确具体发送的数据。 19 * 3.通过socket服务将具体的数据发送出去。 20 * 4.关闭服务。 21 */ 22 System.out.println("UDP发送端启动了。。。"); 23 24 //1.创建udp服务。 25 DatagramSocket ds = new DatagramSocket(); 26 27 //2.明确数据。 28 String str = "注意啦,UDP来了!"; 29 30 String ipdress = "127.0.0.1"; 31 //3.发送数据, 将数据封装到数据包中。 32 //3.1将数据封装到数据包对象中。数据包会明确目的地址和端口。 33 byte[] buf = str.getBytes(); 34 DatagramPacket dp = new DatagramPacket(buf, buf.length, 35 InetAddress.getByName(ipdress),10000); 36 //3.2发送。 37 ds.send(dp); 38 39 //4.关闭。 40 ds.close(); 41 } 42 43 }
UDP接收端
package chuanzhiBlog; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPReceDemo { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub /* * 创建udp的接收端。 * 思路: * 1.创建socket服务。明确一个端口。 * 2.收数据。 * 3.将其中所需要的数据取出来,IP,data,端口。 * 4.关闭资源。 */ System.out.println("UDP接受端启动了。。。。。"); //1.创建socket服务。 DatagramSocket ds = new DatagramSocket(10000); //2.使用socket的接收方法。接受数据。需要将收到的数据存储到数据包中。 //可以通过数据包对象的方法对接收的数据进行解析。 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); ds.receive(dp); //3.通过数据包对象解析收到的数据,使用数据包的方法。 String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String str = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+":"+port+"....."+str); } }
原文:https://www.cnblogs.com/xiaonizi1027/p/10353238.html