建设部考试中心网站万表网手表官网

当前位置: 首页 > news >正文

建设部考试中心网站,万表网手表官网,百度企业查,建站视频一、什么是网络编程 定义#xff1a;在网络通信协议下#xff0c;不同计算机上运行的程序#xff0c;进行的数据传输。 应用场景#xff1a;即时通信#xff0c;网游#xff0c;邮件等 不管什么场景#xff0c;都是计算机与计算机之间通过网络在进行数据传输 java提供一…一、什么是网络编程 定义在网络通信协议下不同计算机上运行的程序进行的数据传输。 应用场景即时通信网游邮件等 不管什么场景都是计算机与计算机之间通过网络在进行数据传输 java提供一个java.net包可以帮助我们开发网络应用程序。 二、常见的网络应用程序架构 CS架构是指在远端有一个服务器Server用户需要在本地下载一个客户端Client。 BS架构是指远端有一个服务器用户通过浏览器进行访问。
BS架构的优缺点 优点 ①不需要开发客户端只需要页面和服务端 ②用户不需要下载应用只需要在浏览器访问 缺点 ①如果应用中的资源体积过大那么用户体验将受到影响比如图片过大浏览器就要加载一会儿才能显示。
CS架构的优缺点 优点 ①画面可以做的非常精美不用担心传输慢因为需要提前下载资源包到本地 缺点 ②需要开发客户端和服务端工作量加大 ③用户需要下载安装和更新 三、网络编程三要素 IP、端口号、协议
IP 全称Internet Protocol是互联网协议地址也称ip地址是分配给上网设备的数字标签。 常见的IP分类有IPv4和IPv6两种。 IPv4 IPv6 总结 IPv4是如何节约分配的 以网吧举例网吧里面的电脑很多不可能为每一台电脑设置一个公网ip所以就出现了下面的方案 所有电脑共用一个公网ip每台电脑拥有一个局域网ip
特殊的Ip地址 127.0.0.1也可以是localhost是回送地址也称本地回环地址也称本机ip永远只会寻找当前所在本机。 提问 如果192.168.1.100是我电脑的ip地址那么这个ip和127.0.0.1是一样的吗 答案不是的192.168.1.100是局域网给你的电脑分配的ip地址而127.0.0.1是只代表本机的地址 举例 使用电脑向192.168.1.100发送消息数据会先经过路由器然后通过路由器发送数据给我的电脑。 并且如果我的电脑换了一个局域网环境比如换了一个路由器那么我的电脑的ip地址可能会发生改变。 如果使用127.0.0.1我的电脑就不会向路由器发送信息信息在通过网卡的时候就会发现这条数据是发送给回环地址的直接发送给我的电脑。
常见的cmd命令 总结 InetAddress对象 InetAddress类没有公有的构造方法只能通过getByName(String name方法获取InetAddress对象。 InetAddress对象表示一个IP一个IP对应着一台网络中的设备所以InetAddress对象也可以表示一台设备。 当获取到这台设备的InetAddress对象时就可以给这个对象发送消息了 /*** author Watching* * date 2023/5/26* * Describe:* static InetAddress getByName(String host) 确定主机名称的ip地址主机名称可以是机器名称也可以是ip地址* String getHostName() 获取此ip地址的主机名* String getHostAddress() 返回文本显示中的ip地址字符串/ public class MyInetAddressDemo1 {public static void main(String[] args) throws UnknownHostException {//InetAddress 表示ip的对象而ip有表示一台联网设备所以这也能表示一台设备对象InetAddress address InetAddress.getByName(DESKTOP-DHVQ061);System.out.println(address);String hostAddress address.getHostAddress();System.out.println(hostAddress);String hostName address.getHostName();System.out.println(hostName);} }端口号 端口号时应用程序在一台设备中的唯一标识 端口号由两个字节表示的整数取值范围0~65535 其中0~1023之间的端口用于一些知名的网络服务或应用所以我们自己的程序应该使用1024以上的端口号 一个端口号只能被一个应用程序使用 协议 计算机网络中连接和通信的规则被称为网络通信协议。
OSI参考模型 数据从应用层一直传输到物理层转为可网络传递的二进制形式传递另外一台电脑上再由下到上到应用层转为原始数据。 TCP/IP协议 TCP/IP模型将应用层、表示层、会话层合为一层数据链路层、物理层合为一层。 TCP/IP模型减少了流程复杂度减少了资源消耗 我们重点学习传输层的TCP和UDP协议。 UDP协议 UDP协议的特点就是速度快面向无连接 不管是否连接成功都会发送数据应用场景比如视频聊天电话等就算出现了连接失败也只是会出现卡顿的情况
测试UDP传输数据 步骤 1.创建DatagramSocket对象建立连接 2.打包数据需要指定接收端口 3.发送数据 4.关闭连接 /**
author Watching* * date 2023/5/26* * Describe:/ public class SendMessageDemo1 {public static void main(String[] args) throws IOException {//发送数据//1.创建DatagramSocket对象//细节://绑定端口以后我们就是通过这个端口往外发送//空参:所有可用的端口中随机一个进行使用//有参:指定端口号进行绑定DatagramSocket datagramSocket new DatagramSocket();//2.打包数据String str 你好威啊;byte[] bytes str.getBytes();InetAddress address InetAddress.getByName(127.0.0.1);int port 10086;DatagramPacket dp new DatagramPacket(bytes,bytes.length,address,port);//3.发送数据datagramSocket.send(dp);//4.关闭连接datagramSocket.close();} }在打包数据的时候DatagramPacket里面有很多构造器可以根据需要选择不同的构造器。 测试UDP接收数据 步骤: 1.创建DatagramSocket对象建立连接端口要与发送者的目的端口一致 2.创建DatagramPacket对象接收数据 3.通过DatagramPacket对象获取数据、数据长度、发送者IP、发送者端口号等信息 4.断开连接 /** author Watching* * date 2023/5/27* * Describe:/ public class ReceiveMessageDemo {public static void main(String[] args) throws IOException {//1.创建socket连接,端口要与发送消息的要相同DatagramSocket ds new DatagramSocket(10086);//2.接受数据包byte[] bytes new byte[1024];DatagramPacket dp new DatagramPacket(bytes, bytes.length);//该方法是阻塞式的方法会一直阻塞直到接受到消息ds.receive(dp);//3.解析数据包byte[] data dp.getData();int length dp.getLength();InetAddress address dp.getAddress();int port dp.getPort();System.out.println(new String(data,0, length));System.out.println(数据是从 [ address ] 发送来的);System.out.println(端口是 [ port ]);} }接收数据时使用的DatagramSocket对象的 receive(DatagramPacket dp) 方法这个方法是阻塞式的直到接收到传来的消息才会停止阻塞。 UDP的三种通信方式 单播 单对单传输 组播 一组设备接收消息 广播 所有设备都能接收消息
UDP三种通信方式的代码实现 单播 前面我们编写的代码就是单播 组播 发送端 步骤 ①创建组播连接使用MultiCastSocket类 ②创建DatagramPacket对象打包数据需要指定接收端口 ③发送消息 ④关闭连接 /**
author Watching* * date 2023/5/27* * Describe:测试组播发送代码/ public class SendMessageDemo2 {public static void main(String[] args) throws IOException {//1.创建组播连接MulticastSocket mcs new MulticastSocket();//2.创建数据包打包数据String str 你好;byte[] bytes str.getBytes();InetAddress address InetAddress.getByName(224.0.0.1);int port 10086;DatagramPacket dp new DatagramPacket(bytes, bytes.length,address,port);//3.发送消息mcs.send(dp);//4.关闭连接mcs.close();} }接收端 步骤 ①创建组播连接使用MultiCastSocket ②将当前连接加入组播地址 ③创建DatagramPacket对象接收数据 ④解析数据 ⑤关闭连接 /* author Watching* * date 2023/5/27* * Describe:接收组播消息/ public class ReceiveMessageDemo2 {public static void main(String[] args) throws IOException {//1.建立mcs连接并且填写发送端的端口MulticastSocket mcs new MulticastSocket(10086);//2.将当前本机连接加入组播InetAddress address InetAddress.getByName(224.0.0.1);mcs.joinGroup(address);//3.创建DatagramPacket接收数据byte[] bytes new byte[1024];DatagramPacket dp new DatagramPacket(bytes, bytes.length);//4.接收数据mcs.receive(dp);//5.解析数据int port dp.getPort();InetAddress ip dp.getAddress();int length dp.getLength();byte[] data dp.getData();System.out.println(new String(data, 0, length));System.out.println(数据来自 [ ip ] 端口 [ port ]);//5.关闭连接mcs.close();} } 可以多创建两个类并运行他们当发送端的代码执行后每个添加进组播的连接都能接收到数据 广播 将单播的代码创建数据包DatagramPacket时将发送的地址改为255.255.255.255就成了广播局域网中的所有设备都能受到消息。 TCP协议 TCP协议的特点就是面向连接要在确保连接成功之后才会传输数据应用场景比如下载软件发送邮件等。下载软件丢失了数据可能会导致软件安装不成功发送邮件丢失数据可能会导致邮件内容错乱。
TCP通信程序 客户端代码编写步骤 ①创建客户端Socket对象与指定服务端连接 Socket(String hostint port); ②获取输出流写数据 OutputStream getOutputStream ③释放资源 /**
author Watching* * date 2023/5/27* * Describe:tcp协议客户端/ public class Client {public static void main(String[] args) throws IOException {//tcp协议发送数据//1.创建socket连接对象//细节创建对象的同时会连接服务端如果连接不上会直接报错 Exception in thread main java.net.ConnectException: Connection refused: connectSocket socket new Socket(127.0.0.1,10086);//这行代码就是在创建连接三次握手//2.从连接通道中获取输出流将数据输出给服务端OutputStream outputStream socket.getOutputStream();String str 你好;outputStream.write(str.getBytes());//3.关闭资源outputStream.close();socket.close();//断开连接四次挥手协议保证连接通道中的数据已经处理完成了} }服务端代码编写步骤 ①创建服务器端的socket对象ServerSocket ServerSocker(int port) ②监听客户端连接返回Socket对象 Socket accept() ③获取输入流读数据并把数据显示在控制台 InputStream getInputStream() ④释放资源 /** author Watching* * date 2023/5/27* * Describe:tcp协议服务端*/ public class Server {public static void main(String[] args) throws IOException {//服务端 接收数据//1.创建服务端连接ServerSocket ss new ServerSocket(10086);//需要绑定一个端口号以供客户端访问//2.监听客户端的连接Socket accept ss.accept();//accept方法也是一个阻塞式的方法//3.从连接通道中获取输入流InputStream is accept.getInputStream();byte[] bytes new byte[1024];int len;while ((len is.read(bytes)) ! -1) {System.out.println(new String(bytes,0,len));}//4.释放资源is.close();ss.close();} }3次握手4次挥手 3次握手建立连接 4次挥手断开连接
总结