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

微网站免费网站seo教程

微网站免费,网站seo教程,wordpress手机客户端源码,阿里网站年费怎么做分录网络编程 1.什么是网络编程 在网络通信协议下#xff0c;不同计算机上运行的程序#xff0c;进行的数据传输。 如果想把一个计算的结果#xff0c;或者是电脑上的文件通过网络传递给你的朋友#xff0c;就需要用到网络编程。 在实际生活中#xff0c;网络通信无处不在…网络编程 1.什么是网络编程 在网络通信协议下不同计算机上运行的程序进行的数据传输。 如果想把一个计算的结果或者是电脑上的文件通过网络传递给你的朋友就需要用到网络编程。 在实际生活中网络通信无处不在 **应用场景**即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景都是 计算机 跟 计算机 之间通过网络进行数据传输。 Java中可以使用 java.net 包下的技术轻松开发出常见的网络应用程序。 目前市面上常见的软件架构 B/SC/S 不管是 B/S 架构还是 C/S 架构客户端/浏览器负责的仅仅是把数据展示出来展示给用户去看。在项目中真正核心的逻辑都是在服务器当中的。 BS架构的优缺点 不需要开发客户端只需要页面 服务端用户不需要下载打开浏览器就能使用B/S 的特点主要突出一个方便如果应用过大用户体验受到影响 CS架构的优缺点 画面可以做的非常精美用户体验好因为所有资源都被用户下载到了本地需要开发客户端也需要开发服务端针对公司而言CS架构的开发、安装、部署、维护非常麻烦用户需要下载和更新的时候太麻烦 二者都有各自的优缺具体用哪种需要结合当前项目的特点来断定。一般而言是类似于 LOL、王者荣耀这种游戏它对于画面、音乐都有非常大的要求就用 CS 架构如果类似与新闻这种对画面没有太大要求的就可以使用 BS 架构。 2.网络编程三要素 两台计算机只要需要知道哪些东西才能进行数据传输呢特别是我想要给一堆电脑中的其中一台发送数据需要知道哪些参数才可以呢 确定对方电脑在互联网上的地址这个地址是唯一的——IP确定接收数据的软件从微信-微信而不是微信-qq一个端口号只能被一个软件绑定——端口号确定网络传输的规则数据在传输的时候我们不能随便书写它的格式想怎么写就怎么写——协议 需要知道 IP、端口、协议才能进行数据的传输。手机、IPAD、笔记本都是可以上网的只要上网都需要有一个 IP所以此处写的是设备。 IP 全程Internet Protocol是互联网协议地址也称 IP 地址。是分配给上网设备的数字标签。 通俗理解 上网设备在网络中的地址是唯一的 常见的IP分类为 IPV4、IPV6 IPV4 全称Internet Protocol version 4互联网通信协议第四版。 采用 32 位地址长度分为 4 组 真实的 IP 是 32 bit 的二进制数 因为不好记也不好用后来采用点分十进制表示法将 8 个 bit 作为一组转化为 10进制总共分为4组它们是无符号数每一组的取值范围是 0 ~ 255。 IPV4 的缺点在 IPV4 中总共只有不到 43 亿个 IPIPV4 的数量是有限的是不够使用的2019年11月26日全部分配完毕。为了解决 IP 不够用的问题出现了 IPV6。 IPV6 全称Internet Protocol version 6互联网通信协议第六版。 由于互联网的蓬勃发展IP地址的需求量愈来愈大而 IPV4 的模式下 IP 的总数是有限的。 IPV6 采用 128 位地址长度分为 8 组每一组是 16 个 bit。IPV6 可以给地球上每一粒沙子都定义一个 IP。 目前 IPV6 还未普及在不久的将来IPV6 会超越 IPV4成为市场的主流。 IPV4已经分配完了IPV6还未普及目前如何解决IP不够用的问题 IPV4的地址分类形式 公网地址万维网使用和私有地址局域网使用。192.168. 开头的就是私有地址范围为 192.168.0.0 ~ 192,168.255.255专门为组织机构内部使用以此节省 IP 在网吧中所有电脑共享同一个公网 IP再由路由器给每一台电脑分配局域网 IP这样就可以实现节约 IP 的效果。 特殊IP地址 127.0.0.1也可以是 localhost: 是回送地址也称本地回环地址也称本地本机 IP永远只会寻找当前所在本机。 疑问 假设 192.168.1.100 是我电脑的 IP那么这个 IP 跟 127.0.0.1 是一样的吗 它们是不一样的。 假设我们现在有一堆电脑它们的 IP 都是由路由器分配的。 每一个路由器给设备分配的 IP 可能是不一样的所以会有这么一个情况当我们换了一个地方上网我们上网设备的局域网 IP 有可能不一样。 但是如果我们往 127.0.0.1 发送数据那么它是不经过路由器的。我们的数据经过网卡的时候网卡发现我们要往 127.0.0.1 发送数据此时它就把这个数据给我们自己发过来了不管在哪里上网永远都是这样的。这就是两者的区别。 建议 在练习的时候如果我们是自己给自己发送数据就写 127.0.0.1 就可以了。 常见 CMD 命令 ipconfig 查看本机 IP 地址ping 检查网络是否连通不仅可以检查局域网是否畅通还可以检查外网是否畅通。在 ping 的后边既可以跟随 IP也可以跟随 网址。 网址的底层逻辑其实也是 ip InetAddress 的使用 在Java中用来表示 IP 的类InetAddress 在底层它会进行判断我们用的是 6 版本的还是 4 版本的如果是 4 版本的它其实创建的是它的子类 Inet4Address 的对象并返回如果是 6 版本的则会创建 Inet6Address 并返回。 由于该类没有对外暴露构造方法所以我们需要通过它的构造方法 getByName 来获取它的对象。这个方法的底层其实就是判断是 IPV4 和 IPV6判断完之后会创建对应的子类对象并返回。 public class MyInetAddressDemo1 {public static void main(String[] args) throws Exception {/*** static InetAddress getByName(String host) 确定主机名称的 ip 地址。主机名称可以是及其名称也可以是 ip 地址* String getHostName() 获取 IP 地址的主机名* String getHostAddress() 返回文本显示中的 IP 地址字符串*/// 1.获取 InetAddress 的对象// IP 的对象 —— 一台电脑的对象InetAddress address InetAddress.getByName(192.168.0.105);System.out.println(ipv4 address address); // ipv4 address/192.168.0.105// 主机名其实就是我们给自己电脑起的名字如果没起也会有默认的 Win E 打开我的电脑右键 属性可以查看InetAddress address2 InetAddress.getByName(DESKTOP-V32JVCD);System.out.println(hostname address2); // hostnameDESKTOP-V32JVCD/192.168.0.105// getHostName 方法的小细节如果电脑因为网络原因或者局域网中压根就没有这台电脑此时获取不到主机名此时以 IP 的形式进行展示String hostName address.getHostName();System.out.println(hostName); // 192.168.0.105System.out.println(address2.getHostName()); // DESKTOP-V32JVCDString hostAddress address.getHostAddress();System.out.println(hostAddress); // 192.168.0.105System.out.println(address2.getHostAddress()); // 192.168.0.105/*** 这只是一个前置的代码一旦我们获取到 IP 之后我们就可以给某一台电脑发送消息了*/} }端口号 应用程序在设备中唯一的标识 端口号由两个字节表示的整数取值范围0~65535 ​ 其中 0 ~ 1023 之间的端口号用于一些知名的网络服务或者应用 ​ 我们自己使用 1024 以上的端口号就可以了。 注意一个端口号只能被一个应用程序使用。 端口其实就是电脑往外发送数据的出口或者说是电脑接收外部数据的入口。 软件一运行就要绑定一个端口如果没有绑定端口那么它就是单击的是无法往外发送数据/接收数据的。 协议 在计算机网络中连接和通信的规则被称为网络通信协议。协议就是数据传输的规则 在传输数据的时候国际标准组织定义了一个 OSI 的网络参考模型把传输数据分成了7层 OSI 参考模型世界互联协议标准全球通信规范单模型过于理想化未能在因特网上进行广泛推广。TCP/IP 参考模型或 TCP/IP 协议事实上的国际标准。 代码运行在应用层如果我们想给对方电脑发送数据则会一层一层的往下到达物理层然后转化为二进制数据再发送给对方电脑。对方电脑接收到数据之后会进行解析再一层一层的传输给最上方的应用层我们的程序就可以接收到数据了。 UDP 协议 用户数据报协议User Datagram Protocol UDP 是 面向无连接 通信协议。 速度快有大小限制一次最多发送 64 k数据不安全易丢失数据 面向无连接UDP 协议传输数据时不会管两台设备之间的网络是否畅通直接发你能收到就收到收不到就拉倒。 UDP 适用于丢失一点数据不会产生任何影响的场景比如网络会议、语言通话、在线视频 TCP 协议 传输控制协议 TCPTransmission Control Protocol TCP 协议是 面向连接 的通信协议。 速度慢没有大小限制数据安全。 TCP 发送数据之前会先检查两台设置之间的网络畅通。简单来说就是确保连接成功才会发送数据。 TCP 适用于对数据有非常大的需求一点都不能丢的情况。比如下载软件、文字聊天、发送邮件 3.UDP通信程序 UDP 通信程序发送数据 UDP 协议发送数据 public class SendMessageDemo {public static void main(String[] args) throws Exception {// 发送数据// 1.创建 DatagramSocket对象快递公司// 细节// 绑定端口以后我们就是通过这个端口往外发送数据// 空参所有可用的端口中随机一个进行使用// 有参指定端口号进行绑定// DatagramSocket socket new DatagramSocket(8000);DatagramSocket socket 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.发送数据socket.send(dp);// 4.释放资源socket.close();} }UDP 通信程序接收数据 注意一定得先运行接收端再运行发送端 public class ReceiveMessageDemo {public static void main(String[] args) throws Exception {// 接收数据// 注意一定得先运行接收端再运行发送端// 1.创建DatagramSocket对象快递公司// 细节// 在接收的时候一定要绑定端口// 而且绑定的端口一定要跟发送的端口保持一直DatagramSocket socket new DatagramSocket(10086);// 2.接收数据包既然此处是用来接收数据的所以只需要传一个数组即可IP 和 端口就不用了byte[] bytes new byte[1024];DatagramPacket packet new DatagramPacket(bytes, bytes.length);// 该方法是阻塞的// 程序执行到这一步的时候会在这里死等// 等发送端发送消息socket.receive(packet);// 3.解析数据包byte[] data packet.getData();int length packet.getLength();InetAddress address packet.getAddress();int port packet.getPort();System.out.println(接收到的数据 new String(data, 0, length));System.out.println(该数据是从 address 这台电脑中的 port 端口发送过来的);//4.资源释放socket.close();} }从哪个端口发出无所谓只要发送的 ip port 指向接收端即可。 练习聊天室 public class SendMessageChat {public static void main(String[] args) throws Exception {DatagramSocket socket new DatagramSocket(7070);Scanner scanner new Scanner(System.in);while (true) {System.out.println(请输入您要说的话);String next scanner.nextLine();byte[] bytes next.getBytes();DatagramPacket packet new DatagramPacket(bytes, bytes.length, InetAddress.getByName(127.0.0.1), 7071);socket.send(packet);if (next.equals(886)) {break;}}System.out.println(退出发送端);socket.close();} }public class ReceiveMessageChat {public static void main(String[] args) throws Exception {DatagramSocket socket new DatagramSocket(7071);// 每次接收到数据都会对 bytes 进行覆盖byte[] bytes new byte[1024];DatagramPacket packet new DatagramPacket(bytes, bytes.length);while (true) {socket.receive(packet);System.out.println(packet.getAddress().getHostAddress() : packet.getPort() 的设备发来数据 new String(packet.getData(), 0, packet.getLength()));}} }允许某个类可以允许多个 UDP 的三种通信方式 单播一对一左边的发送端只给右边的一台设备发送消息 以前的代码就是单播 组播可以给一组设备发送消息 组播地址224.0.0.0 ~ 239.255.255.255 ​ 其中 244.0.0.0 ~ 244.0.0.255 为预留的组播地址我们自己想用只能用这个范围之内的 之前的 ip 只能表示一台电脑而这里随便一个组播地址就可以表示多台电脑 组播发送端代码 public class SendMessageDemo {public static void main(String[] args) throws Exception {/*** 组播发送代码*/// 通过 MulticastSocket 对象MulticastSocket ms new MulticastSocket();// 创建 DatagramPacket 对象String str 你好你好;byte[] bytes str.getBytes();// 发送时指定 IP 地址一定要指定组播地址InetAddress address InetAddress.getByName(224.0.0.1);int port 10000;DatagramPacket datagramPacket new DatagramPacket(bytes, bytes.length, address, port);// 调用 MulticastSocket 发送数据方法发送数据ms.send(datagramPacket);// 释放资源ms.close();} }组播接收端代码 public class ReceiveMessageDemo1 {public static void main(String[] args) throws Exception {/*** 组播接收端代码*/// 1.创建 MulticastSocket 对象MulticastSocket ms new MulticastSocket(10000);// 2.将当前本机添加到 224.0.0.1 的这一组当中InetAddress address InetAddress.getByName(224.0.0.1);ms.joinGroup(address);// 3.创建 DatagramPacket 数据包对象byte[] bytes new byte[1024];DatagramPacket dp new DatagramPacket(bytes, bytes.length);// 4.接收数据ms.receive(dp);// 5.解析数据byte[] data dp.getData();int len dp.getLength();String ip dp.getAddress().getHostAddress();String name dp.getAddress().getHostName();System.out.println(ip 为 ip 主机名为 name 的人发送了数据 new String(data, 0, len));// 6. 释放资源ms.close();} }广播可以给局域网中所有设备发送消息 广播地址255.255.255 广播代码几乎和单播一模一样只需要修改 ip 地址为 255.255.255.255 即可 广播发送端 public class SendMessageDemo {public static void main(String[] args) throws Exception {// 发送数据// 1.创建 DatagramSocket对象快递公司// 细节// 绑定端口以后我们就是通过这个端口往外发送数据// 空参所有可用的端口中随机一个进行使用// 有参指定端口号进行绑定// DatagramSocket socket new DatagramSocket(8000);DatagramSocket socket new DatagramSocket();// 2.打包数据String str 你好威猛啊;byte[] bytes str.getBytes();InetAddress address InetAddress.getByName(255.255.255.255);int port 10000;DatagramPacket dp new DatagramPacket(bytes, bytes.length, address, port);// 3.发送数据socket.send(dp);// 4.释放资源socket.close();} }广播接收端 public class ReceiveMessageDemo {public static void main(String[] args) throws Exception {// 接收数据// 注意一定得先运行接收端再运行发送端// 1.创建DatagramSocket对象快递公司// 细节// 在接收的时候一定要绑定端口// 而且绑定的端口一定要跟发送的端口保持一直DatagramSocket socket new DatagramSocket(10000);// 2.接收数据包既然此处是用来接收数据的所以只需要传一个数组即可IP 和 端口就不用了byte[] bytes new byte[1024];DatagramPacket packet new DatagramPacket(bytes, bytes.length);socket.receive(packet);// 3.解析数据包byte[] data packet.getData();int length packet.getLength();InetAddress address packet.getAddress();int port packet.getPort();System.out.println(接收到的数据 new String(data, 0, length));System.out.println(该数据是从 address 这台电脑中的 port 端口发送过来的);//4.资源释放socket.close();} }4.TCP通信程序 TCP 通信协议是一种可靠的网络协议它在通信的两端各建立一个 Socket 对象 通信之前要保证连接已经建立 通过 Socket 产生 IO 流来进行网络通信 TCP 发送数据 public class Client {public static void main(String[] args) throws Exception {// TCP 协议发送数据// 1.创建 Socket 对象// 细节在创建对象的同时会连接服务端如果连接不上代码会报错Socket socket new Socket(127.0.0.1, 10000);// 2.可以从连接通道中获取输入流OutputStream os socket.getOutputStream();// 写出数据os.write(你好你好.getBytes()); // 字节流输出时只能输出字节数据// 3.释放资源os.close();socket.close();} }TCP 读取数据 public class Server {public static void main(String[] args) throws Exception {// TCP 协议接收数据// 1.创建对象 ServerSocket// 注意创建对象时一定要绑定一个端口而且此端口一定要跟客户端连接的端口保持一致// 如果不一致的话客户端还是连接不上ServerSocket serverSocket new ServerSocket(10000);// 2.监听客户端的连接Socket socket serverSocket.accept();// 3.从连接通道中获取输入流读取数据/*InputStream is socket.getInputStream();// 结局中文乱码问题写的时候是把一个中文字符分为3个字节来输出读的时候需要一个字符一个字符的读InputStreamReader isr new InputStreamReader(is);*/BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream()));int buff;while ((buff br.read()) ! -1) {System.out.print((char) buff);}// 4.释放资源br.close();// 断开于客户端之间的连接socket.close();// 关闭服务器serverSocket.close();} }TCP 通信程序三次握手 ICMP协议 TCP 通信程序四次挥手 ICMP协议 四次回收必须等待服务端把连接通道里的数据处理完毕了连接才能断开 5.综合练习 TCP通信练习1 — 多发多收 客户端多次发送数据 public class Client {public static void main(String[] args) throws Exception {// 客户端多次发送数据// 服务器接收多次接收数据并打印// 1.创建 Socket 对象并连接服务端Socket socket new Socket(127.0.0.1, 10000);// 2.写出数据OutputStream outputStream socket.getOutputStream();Scanner sc new Scanner(System.in);while (true) {System.out.println(请输入您要发送的信息);String msg sc.nextLine();if (msg.equals(886)) {break;}outputStream.write(msg.getBytes());}System.out.println(客户端下线);// 3.释放资源sc.close();socket.close();} }服务端接收多次接收数据并打印 public class Server {public static void main(String[] args) throws Exception {// 客户端多次发送数据// 服务器接收多次接收数据并打印// 1. 创建对象绑定 10000 端口ServerSocket serverSocket new ServerSocket(10000);// 2.等待客户端连接Socket socket serverSocket.accept();// 3.读取数据BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream()));int buff;while ((buff br.read()) ! -1) {System.out.print((char) buff);}// 4.释放资源socket.close();serverSocket.close();} }TCP通信练习2 — 接收和反馈 客户端发送一条数据接收服务端反馈的消息并打印 public class Client {public static void main(String[] args) throws Exception {// 客户端发送一条数据接收服务端反馈的消息并打印// 服务端接收数据并打印再给客户端反馈消息// 1.创建 Socket 对象连接服务器Socket socket new Socket(127.0.0.1, 10000);// 2.写出数据String str 见到你很高兴;OutputStream os socket.getOutputStream();os.write(str.getBytes());// 写出一个结束标记socket.shutdownOutput(); // 结束输出流// 3.接收服务端回写的数据BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream()));int b;while ((b br.read()) ! -1) {System.out.print((char) b);}// 4.释放资源socket.close();} }服务端接收数据并打印再给客户端反馈消息 public class Server {public static void main(String[] args) throws Exception {// 客户端发送一条数据接收服务端反馈的消息并打印// 服务端接收数据并打印再给客户端反馈消息// 1.创建对象并绑定 10000 端口ServerSocket ss new ServerSocket(10000);// 2.等待客户端连接Socket socket ss.accept();// 3.socket中获取输入流读取数据BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream()));int b;/*** 细节* read 方法会从连接通道中读取数据* 但是需要有一个结束标记此处的循环才会停止* 否则程序就会一直停在 read 方法这里等待读取下面的数据*/while ((b br.read()) ! -1) {System.out.print((char) b);}// 4.回写数据String str 到底有多开心;OutputStream os socket.getOutputStream();os.write(str.getBytes());// 5.释放资源socket.close();ss.close();} }TCP通信练习3 — 上传文件 客户端将本地文件上传到服务器。接收服务器的反馈。 public class Client {public static void main(String[] args) throws Exception {// 客户端将本地文件上传到服务器。接收服务器的反馈。//服务器接收客户端上传的文件上传完毕之后给出反馈。// 1.创建 Socket 对象连接服务器Socket socket new Socket(127.0.0.1, 10000);// 2.读取本地文件中的数据并写到服务器中BufferedInputStream bis new BufferedInputStream(new FileInputStream(./clientdir/a.png));BufferedOutputStream bos new BufferedOutputStream(socket.getOutputStream());byte[] bytes new byte[1024];int len;while ((len bis.read(bytes)) ! -1) {bos.write(bytes, 0, len);}// 输出文件结束符socket.shutdownOutput();// 回写数据BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream()));System.out.println(br.readLine());// 3.释放资源bis.close();socket.close();} }服务器接收客户端上传的文件上传完毕之后给出反馈。 public class Server {public static void main(String[] args) throws Exception {// 客户端将本地文件上传到服务器。接收服务器的反馈。//服务器接收客户端上传的文件上传完毕之后给出反馈。// 1.创建对象并绑定 10000 端口ServerSocket ss new ServerSocket(10000);// 2.等待客户端连接Socket socket ss.accept();// 3.读取数据并保存到本地文件中BufferedInputStream bis new BufferedInputStream(socket.getInputStream());BufferedOutputStream bos new BufferedOutputStream(new FileOutputStream(./serverdir/b.png));byte[] bytes new byte[1024];int len;while ((len bis.read(bytes)) ! -1) {bos.write(bytes, 0, len);}// 回写数据BufferedWriter bw new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write(上传成功);bw.newLine();bw.flush();// 4.释放资源bos.close();socket.close();ss.close();} }TCP通信练习4 — 上传文件文件名重复问题 解决上一题文件名重复问题 客户端不变服务端输出文件时文件名使用 UUID 生成 public class Server {public static void main(String[] args) throws Exception {// 客户端将本地文件上传到服务器。接收服务器的反馈。//服务器接收客户端上传的文件上传完毕之后给出反馈。// 1.创建对象并绑定 10000 端口ServerSocket ss new ServerSocket(8000);// 2.等待客户端连接Socket socket ss.accept();// 3.读取数据并保存到本地文件中BufferedInputStream bis new BufferedInputStream(socket.getInputStream());String name UUID.randomUUID().toString().replace(-, ) .png;BufferedOutputStream bos new BufferedOutputStream(new FileOutputStream(./serverdir/ name));byte[] bytes new byte[1024];int len;while ((len bis.read(bytes)) ! -1) {bos.write(bytes, 0, len);}// 回写数据BufferedWriter bw new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write(上传成功);bw.newLine();bw.flush();// 4.释放资源bos.close();socket.close();ss.close();} }TCP通信练习5 — 上传文件多线程版 想要服务器不停止能接收很多用户上传的图片。 该怎么做呢 提示可以用循环或者多线程。 但是循环不合理最优解法是多线程改写。 public class Server {public static void main(String[] args) throws Exception {// 客户端将本地文件上传到服务器。接收服务器的反馈。// 服务器接收客户端上传的文件上传完毕之后给出反馈。// 1.创建对象并绑定 10000 端口ServerSocket ss new ServerSocket(8000);while (true) {// 2.等待客户端连接Socket socket ss.accept();// 开启一条线程// 一个用户就对应服务端的一条线程new Thread(new MyRunnable(socket)).start();}}static class MyRunnable implements Runnable {private Socket socket;public MyRunnable(Socket socket) {this.socket socket;}Overridepublic void run() {try {// 3.读取数据并保存到本地文件中BufferedInputStream bis new BufferedInputStream(socket.getInputStream());String name UUID.randomUUID().toString().replace(-, ) .png;BufferedOutputStream bos new BufferedOutputStream(new FileOutputStream(serverdir/ name));byte[] bytes new byte[1024];int len;while ((len bis.read(bytes)) ! -1) {bos.write(bytes, 0, len);}// 回写数据BufferedWriter bw new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write(上传成功);bw.newLine();bw.flush();// 4.释放资源bos.close();} catch (IOException e) {throw new RuntimeException(e);} finally {if (null ! socket) {try {socket.close();} catch (IOException e) {throw new RuntimeException(e);}}}}} }TCP通信练习6 — 上传文件线程池版 频繁创建并销毁线程非常浪费系统资源所以需要用线程池优化。 public class Server {public static void main(String[] args) throws Exception {// 客户端将本地文件上传到服务器。接收服务器的反馈。// 服务器接收客户端上传的文件上传完毕之后给出反馈。// 创建线程池对象ThreadPoolExecutor pool new ThreadPoolExecutor(3, // 核心线程数16, // 线程池总大小60, // 空闲时间TimeUnit.SECONDS, // 空闲时间单位new ArrayBlockingQueue(2), // 阻塞队列Executors.defaultThreadFactory(), // 线程工厂让线程池如何创建线程对象new ThreadPoolExecutor.AbortPolicy() // 拒绝策略);// 1.创建对象并绑定 10000 端口ServerSocket ss new ServerSocket(8000);while (true) {// 2.等待客户端连接Socket socket ss.accept();// 开启一条线程// 一个用户就对应服务端的一条线程pool.submit(new MyRunnable(socket));}}static class MyRunnable implements Runnable {private Socket socket;public MyRunnable(Socket socket) {this.socket socket;}Overridepublic void run() {try {// 3.读取数据并保存到本地文件中BufferedInputStream bis new BufferedInputStream(socket.getInputStream());String name UUID.randomUUID().toString().replace(-, ) .png;BufferedOutputStream bos new BufferedOutputStream(new FileOutputStream(serverdir/ name));byte[] bytes new byte[1024];int len;while ((len bis.read(bytes)) ! -1) {bos.write(bytes, 0, len);}// 回写数据BufferedWriter bw new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write(上传成功);bw.newLine();bw.flush();// 4.释放资源bos.close();} catch (IOException e) {throw new RuntimeException(e);} finally {if (null ! socket) {try {socket.close();} catch (IOException e) {throw new RuntimeException(e);}}}}} }TCP通信练习7 — BS接收浏览器的消息并打印 客户端不需要写 服务端接收数据并打印 public class Server {public static void main(String[] args) throws Exception {// 服务端BS架构-接收浏览器的消息并打印// 1.创建对象并绑定 10000 端口ServerSocket ss new ServerSocket(8000);// 2.等待客户端连接Socket socket ss.accept();// 3.socket中获取输入流读取数据BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream()));int b;while ((b br.read()) ! -1) {System.out.print((char) b);}// 4.释放资源socket.close();ss.close();} }浏览器直接请求 127.0.0.1:8000 即可看到控制台输出 GET / HTTP/1.1 Host: 127.0.0.1:8000 Connection: keep-alive sec-ch-ua: Chromium;v116, Not)A;Brand;v24, Microsoft Edge;v116 sec-ch-ua-mobile: ?0 sec-ch-ua-platform: Windows Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,image/apng,*/*;q0.8,application/signed-exchange;vb3;q0.7 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q0.9,en;q0.8,en-GB;q0.7,en-US;q0.6TCP通信练习8 — 网络编程课后大作业
http://www.zqtcl.cn/news/193868/

相关文章:

  • 网站建设与管理视频网站推广的方法枫子
  • 苏州市住房和城乡建设局官方网站宠物之家网站开发
  • 建个人网站活字格能开发企业网站吗
  • php网站后台密码忘记做电子商务网站 语言
  • 网站建设策划师怎样进入国外网站
  • 建设银行商城网站浙江建站管理系统价格
  • 我想做个网站怎么做的常用的网络营销方法及效果
  • 南通专业做网站南宁网站建设mxfsem
  • 阿里巴巴电子商务网站建设目的网站专题素材
  • 浙江虎霸建设机械有限公司网站哪个网站做简历好
  • 网站做电商资质吗网站开发作品
  • 大型彩灯制作公司临清聊城网站优化
  • 网站建设灬金手指下拉十五网络运维工程师简历怎么写
  • 黄岛建设局网站动漫采集WordPress
  • 做网站现在挣钱吗wordpress 网址导航主题
  • 外贸网站什么采集wordpress主题更换logo
  • 唐山开发网站的公司长沙营销型网站设计
  • 数据库策略网站推广的有效方法有美辰网站建设
  • c 网站开发构想做网站的点子
  • 个人网站模板下载提供网站建设备案公司
  • 做网站需要会写代码6山东东营
  • 兼职刷客在哪个网站做网站搬家数据库配置
  • 做搬运的话哪个网站好网站模板建站
  • 建设个人信息网站wordpress 用户权限
  • 网站不显示域名解析错误怎么办公益网站设计
  • 怎么上传网站图片的链接手表网站排行榜
  • 网站推广方法100种百度排名规则
  • 上海专业网站建设公司站霸网络萝岗区网站建设推广
  • 做微商网站的公司永久免费crm管理系统
  • 网站开发的环境专业的建设网站