TCP/UDP协议

1网络通讯协议(java中看到协议就是规则):最广泛的通讯协议是TCP/IP协议
IP地址:就是具体的家庭地址,如到了那个小区几号楼但是没有门牌号;
端口:就是具体到了门牌号;程序中通过IP地址找到计算机,通过端口号找到相应的程序
2.InetAddress:是包装了IP地址的类;方法有:
1.通过IP地址或者主机名获取InetAddress对象;通过这个对象获取Ip和主机名
通过ip地址获取:InetAddress inet=InetAddress.getByName("192.168.1.1");
通过主机名获取:InetAddress inet=InetAddress.getByName("WRTD");
获取本机主机的Inet对象:InetAddress inet=InetAddress.getLocalHost();
3.通过获取的InetAddress对象后再通过InetAddress对象获取Ip地址和主机名
获取IP地址:inet.getHostAddress(); 获取主机名:inet.getHostName();
4.UDP(重要数据不要用;无连接的通信协议):发送端不会确认是否存在接收端,接收数据后也不 会反馈是否接收到数据
5.UDP:64kb以内的数据可以传输,因为UDP是无连接的传输协议所以传输速度快而且效率高,所以 传输音频/视频、图片等文件可以用UDP但是重要的文件不要用UDP
6.TCP协议是面向连接的通信协议:在接收数据前需要子发送端和接收端建立连接才行;在传输数 据前会进行三次握手:第一次:客户端会先向服务器发送请求并等待确认,第二次:服务器会向客 户端发送相应并确认已接收到请求;第三次握手:客户端会再次向服务器发送信息并确认连接.
7.TCP协议是面向连接的协议,传输的安全性高,被广泛应用,所以在下载文件时会用TCP协议。、
8.UDP通信:DatagramPacket:打包接收或发送的数据,相当于集装箱;
DatagramSocket:负责接收或发送已经被DatagramPacket打包好的数据;
UPD发送端:1.创建数据包,明确要发送的对象:byte[] bytes="你好".getbytes();因为这里的"你好"是字符串是String类型所以需要.getbytes()方法把String转成byte数组
2.创建InetAddress对象明确要发送的地址(IP):InetAddress ip=new InetAddress.getbyName("127.0.0.1");
3.创建DatagramPacket对象把要发送的内容,内容长度,地址,端口号封装到一起:DatagramPecket dk=new DatagramPacket(bytes,bytes.length,ip,6666);
4.获取DatagramSocket对象发送DatagramPacket对象;DatagramSocket ds=new DatagramSocket();
5.发送:ds.send(dp); 6.释放资源:ds.close();
UDP接收端:1.创建DatagramSocket对象创建接收的驱动对象;DatagramSocket ds=new DatagramSocket();
2. 创建接收数据的数组: byte[] bytes=new byte[1024];
3.创建DatagramPocket对象把要用于接收的对象(byte数据和长度)进行包装:DatagramPacket dk=new DatagramPacket(bytes,bytes.length);
4.开始接收数据:ds.receive(dp);
5.接收完数据后开始拆箱:Sting ip=dp.getAddresss().getHostAddress();因为dp里面封装接收来的数据,。getAddress()接收到的是Inet对象需要.getHostAddress()才能得到ip
6.获取端口号:int port=dp.getPort(); 获取数据长度(因为可以通过数组长度获取数组bytes接收来的内容):int length=dp.getLength()
7.输出打印:system.out.println(ip地址:ip+端口号:port+接收的内容:new String(bytes,0,length)这里得到的是byte数组需要通过new String转成字符串,0是从下标0开始,一直截 取到长度是length);
8.循环输入,只能输出接收不能回复的UDP传输:
发送端: Scanner sc=new Scanner(System.in);
1.创建发送的驱动:DatagramSocket ds=new DatagramSocket(); 2.创建InetAddress对象明确要发送的地址:InetAddress ip=InetAddress.getbyname("127.0.0.1");
3.开始循环while(true){
4.创建要传输的内容byte[]数组:byte[] bytes=sc.next().getbytes(); 5.创建打包的对象DatagramPacket;DatagramPacket dp=new DatagramPacke(bytes,bytes.length,ip,6666);
6.开始发送:ds.send(dp)}
接收端:1.创建接收的驱动器DatagramSocket对象:DatagramSocket ds=new DatagramSocket(端口号:6666);
2.创建用于接收的byte数组;byte[] bytes=new byte[1024];
3.开始循环:while(true){ 4.创建打包对象DatagramPacket; DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
5.开始接收数据:ds.receive(dp); 6.开始拆箱:1.获取ip; String ip=dp.getAddress().getHostAddress();2.获取端口号:int port=dp.getPort();3.获取长度:int length=dp.getLength();7.打印:system.out.println(id地址:id+端口号:port+内容:new String(bytes,0,length))

猜你喜欢

转载自www.cnblogs.com/hankai2735/p/11481883.html