欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > JAVA学习日记(二十六)网络编程

JAVA学习日记(二十六)网络编程

2025/2/23 23:10:30 来源:https://blog.csdn.net/DDDiccc/article/details/144487699  浏览:    关键词:JAVA学习日记(二十六)网络编程

一、网络编程的概念

常见的软件架构:

 

 二、网络编程三要素

IP:设备在网络中的地址,是唯一的标识

端口号:应用程序在设备中的唯一标识

协议:数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp

(一)IP

全称:Internet Protocol ,是互联网协议地址,也称IP地址,是分配给上网设备的数字标签

通俗理解:上网设备在网络中的地址,是唯一的

常见IP分类为:IPv4、IPv6

IPv4概念:

IPv6概念:

 

IPv4地址分类形式:

InetAddress类的使用:

import java.net.InetAddress;
import java.net.UnknownHostException;public class Main {public static void main(String[] args) throws UnknownHostException {//获取InetAddress的对象  static inetAddress getByName(String host)//确定主机名称的ip地址,主机名称可以是机器名称,也可以是ip地址//String getHostName()  获取此IP地址的主机名//String getHostAddress() 返回文本显示中的IP地址字符串InetAddress address=InetAddress.getByName("10.102.54.27");System.out.println(address);  // /10.102.54.27String name=address.getHostName();System.out.println(name);  //LAPTOP-AIFHRFPIString ip=address.getHostAddress();System.out.println(ip);  //10.102.54.27}
}

 (二)端口号

应用程序在设备中的唯一标识。

端口号:由两个字节表示的整数,取值范围:0~65535  其中0~1023之间的端口号用于一些知名的网络服务或者应用  自己使用1024以上的端口号。

注意:一个端口号只能被一个应用程序使用

(三)协议

计算机网路中,连接和通信的规则被称为网络通信协议 

UDP协议:

用户数据报协议(User Datagram Protocol)

UDP是面向无连接通信协议,速度快,有大小限制,一次最多发送64K,数据不安全,易丢失 

(不管是否已经连接)

TCP协议:

传输控制协议TCP(Transmission Control Protocol)

TCP协议是面向连接的通信协议,速度慢,没有大小限制,数据安全

(确保连接成功)

(四)UDP通信程序 

发送数据:

import java.io.IOException;
import java.net.*;public class UDPTest {public static void main(String[] args) throws IOException {//创建DatagramSocket对象//绑定端口,以后就是通过这个端口往外发//空参:所有可用的端口中随机选择一个使用//带参:指定端口号绑定DatagramSocket dgs=new DatagramSocket();//打包数据String str="你好啊!";byte[] bytes=str.getBytes();//127.0.0.1 表示本机IPInetAddress address=InetAddress.getByName("127.0.0.1");//端口号int port=10086;DatagramPacket dgp=new DatagramPacket(bytes,bytes.length,address,port);//发数据dgs.send(dgp);//释放资源dgs.close();}}

接收数据:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPTest2 {public static void main(String[] args) throws IOException {//接受数据//创建DatagramSocket对象//细节: 接收时一定要绑定端口//      端口需要和发送端口保持一致DatagramSocket dgs=new DatagramSocket(10086);//接收数据包byte[] bytes=new byte[1024];DatagramPacket dgp=new DatagramPacket(bytes,bytes.length);//receive 该方法是阻塞的//当程序执行到这一步时,会在这里死等//等发送端发送消息dgs.receive(dgp);//解析数据包byte[] data=dgp.getData();int len=dgp.getLength();InetAddress address=dgp.getAddress();int port=dgp.getPort();System.out.println("接收到数据"+new String(data));System.out.println("该数据是从"+address+"这台电脑中的"+port+"这个端口发送的");//释放资源dgs.close();}
}

三种通信方式:


 ①单播

②组播

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class UDPTest4 {public static void main(String[] args) throws IOException {//组播发送端代码//创建MulticastSocket对象MulticastSocket ms = new MulticastSocket();//创建DatagramPacket对象String s="你好啊~~~";//打包数据byte[] bytes = s.getBytes();//指定组播地址224.0.0.1InetAddress address = InetAddress.getByName("224.0.0.1");//端口号int port = 1000;DatagramPacket dgp = new DatagramPacket(bytes, bytes.length, address, port);//发数据ms.send(dgp);//释放资源ms.close();}}import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class UDPTest3 {public static void main(String[] args) throws IOException {//组播接收端代码//创建MulticastSocket对象MulticastSocket ms=new MulticastSocket(1000);//将当前本机,添加到224.0.0.1的这一组当中InetAddress address=InetAddress.getByName("224.0.0.1");ms.joinGroup(address);//创建DatagramPacket数据包对象byte[] bytes=new byte[1024];DatagramPacket dp=new DatagramPacket(bytes,bytes.length);//接受数据ms.receive(dp);//解析数据byte[] data=dp.getData();String ip=dp.getAddress().getHostAddress();String name=dp.getAddress().getHostName();System.out.println("ip为:"+ip+",主机名为:"+name+",的人,发送了数据:"+new String(data));ms.close();}
}
③广播

(五)TCP通信程序

 

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class TCPTest1 {public static void main(String[] args) throws IOException {//TCP协议发送端//创建Socket对象//在创建对象的同时会连接服务器//如果连接不上,代码会报错Socket socket=new Socket("127.0.0.1",1000);//从连接通道种获取输出流OutputStream ops=socket.getOutputStream();//写出数据ops.write("你好啊".getBytes());//释放资源ops.close();socket.close();}
}import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class TCPTest2 {public static void main(String[] args) throws IOException {//TCP协议接收端//创建ServerSocket对象ServerSocket socket=new ServerSocket(1000);//监听客户端的链接Socket socket1=socket.accept();//从连接通道中获取输入流,读取数据(不能传中文)InputStream ips=socket1.getInputStream();//使用转换流转化为字符流InputStreamReader isr=new InputStreamReader(ips);//为了读取效率,再套一个缓冲流BufferedReader br=new BufferedReader(isr);String s;while((s=br.readLine())!=null){System.out.println(s);}//释放资源ips.close();socket1.close();socket.close();}
}

三次握手:

作用:确保连接建立

四次挥手:

作用:确保连接断开,且数据处理完毕

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词