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

【从0开始学习Java | 第21篇】网络编程综合练习

在这里插入图片描述

文章目录

  • TCP通信练习1 --- 多发多收
  • TCP通信练习2 --- 接收和反馈
  • TCP通信练习3 --- 上传文件(结合io流)🐦‍🔥
  • TCP通信练习5 --- 上传文件(多线程版)🐦‍🔥👏🤔
  • TCP通信练习7 --- BS架构模型(接受浏览器的消息并打印)

TCP通信练习1 — 多发多收

在这里插入图片描述


import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;public class E1_TCP_Client {public static void main(String []args) throws IOException {Socket socket = new Socket("127.0.0.1",10086);OutputStream os = socket.getOutputStream();Scanner sc = new Scanner(System.in);while(true) {String str = sc.nextLine();os.write(str.getBytes());if("886".equals(str))break;}os.close();socket.close();}
}===========================================================import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class E1_TCP_Server {public static void main(String []args) throws IOException {ServerSocket ss = new ServerSocket(10086);Socket sk = ss.accept();InputStream is = sk.getInputStream();InputStreamReader isr = new InputStreamReader(is);int c;while((c=isr.read())!=-1) {System.out.print((char)c);}System.out.println();sk.close();ss.close();}
}

TCP通信练习2 — 接收和反馈

在这里插入图片描述

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;public class E2_TCP_Client {// 客户端:发送一条数据,接收服务端反馈的消息并打印// 服务器:接收数据并打印,再给客户端反馈消息public static void main(String[] args) throws IOException {// 1.创建Socket对象并连接服务器Socket sk = new Socket("127.0.0.1", 10086);// 2.写出数据OutputStream sr = sk.getOutputStream();Scanner sc = new Scanner(System.in);String str = sc.nextLine();sr.write(str.getBytes());// 写一个结束标记sk.shutdownOutput();// 3.接收服务端回写的数据InputStreamReader isr = new InputStreamReader(sk.getInputStream()) ;int num ;while((num = isr.read())!=-1){System.out.print((char)num);}sr.close();sk.close();}
}===============================================================import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class E2_TCP_Server {public static void main(String[] args) throws IOException {// 客户端:发送一条数据,接收服务端反馈的消息并打印// 服务器:接收数据并打印,再给客户端反馈消息// 1.创建对象并绑定10086端口ServerSocket ss = new ServerSocket(10086);// 2.等待客户端连接Socket sk = ss.accept();// 3.从Socket中获取输入流读取数据InputStreamReader isr = new InputStreamReader(sk.getInputStream());int num ;// 注意:read方法会从连接通道中读取数据,但是需要有一个结束标记才能让循环停止while((num = isr.read())!=-1){System.out.print((char)num);}// 4.回写数据String str = "我不想聊了,好烦,滚";OutputStream os = sk.getOutputStream();os.write(str.getBytes());isr.close();ss.close();}
}

TCP通信练习3 — 上传文件(结合io流)🐦‍🔥

在这里插入图片描述

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class E3_TCP_Client {public static void main(String []args) throws IOException {// 客户端:将本地文件上传到服务器,后接收服务器的反馈// 服务器:接收客户端上传的文件,上传完毕后给出反馈// 1.创建Socket对象,连接服务器Socket sk = new Socket("127.0.0.1",10086);// 2.读取本地文件中的数据,并写到服务器中BufferedInputStream bis = new BufferedInputStream(new FileInputStream("网络编程\\ClientDir\\Photo.jpg"));BufferedOutputStream bos = new BufferedOutputStream(sk.getOutputStream());byte []bytes = new byte[1024];int len;while((len = bis.read(bytes))!=-1){bos.write(bytes,0,len);}// 往服务端写出结束标记sk.shutdownOutput();// 3.接收服务端的回写数据BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));String line = br.readLine();System.out.println(line);// 4.释放资源sk.close();}
}===========================================================import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class E3_TCP_Server {public static void main(String[] args) throws IOException {// 客户端:将本地文件上传到服务器,后接收服务器的反馈// 服务器:接收客户端上传的文件,上传完毕后给出反馈// 1.创建对象并绑定端口ServerSocket ss = new ServerSocket(10086);// 2.等待客户端连接Socket sk = ss.accept();// 读取数据并存入本地文件夹中BufferedInputStream bis = new BufferedInputStream(sk.getInputStream());BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("网络编程\\ServerDir\\Photo.jpg"));int len;byte []bytes = new byte[1024];while ((len = bis.read(bytes)) != -1) {bos.write(bytes,0,len);}// 4.回写数据     字节流转换成字符流再用缓冲流包裹BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));bw.write("上传成功");bw.newLine();bw.flush();// 5.关闭资源sk.close();ss.close();}
}

TCP通信练习5 — 上传文件(多线程版)🐦‍🔥👏🤔

()0

import java.io.*;
import java.net.Socket;public class E5_TCP_Client {public static void main(String []args) throws IOException {// 可以实现多用户上传数据【多线程】// 客户端:将本地文件上传到服务器,后接收服务器的反馈// 服务器:接收客户端上传的文件,上传完毕后给出反馈// 1.创建Socket对象,连接服务器Socket sk = new Socket("127.0.0.1",10086);// 2.读取本地文件中的数据,并写到服务器中BufferedInputStream bis = new BufferedInputStream(new FileInputStream("网络编程\\ClientDir\\Photo.jpg"));BufferedOutputStream bos = new BufferedOutputStream(sk.getOutputStream());byte []bytes = new byte[1024];int len;while((len = bis.read(bytes))!=-1){bos.write(bytes,0,len);}// 往服务端写出结束标记sk.shutdownOutput();// 3.接收服务端的回写数据BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));String line = br.readLine();System.out.println(line);// 4.释放资源sk.close();}
}======================================================import java.io.*;
import java.net.Socket;
import java.util.UUID;public class E5_TCP_MyRunnable implements Runnable{Socket sk;public  E5_TCP_MyRunnable(Socket sk){this.sk = sk;}public void run() {try {// 读取数据并存入本地文件夹中BufferedInputStream bis = new BufferedInputStream(sk.getInputStream());// 产生随机名称的函数 (去掉随机数中的横杠"-")String name = UUID.randomUUID().toString().replace("-","");BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("网络编程\\ServerDir\\"+name+".jpg"));int len;byte[] bytes = new byte[1024];while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}// 4.回写数据     字节流转换成字符流再用缓冲流包裹BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));bw.write("上传成功");bw.newLine();bw.flush();}catch(Exception e){e.printStackTrace();}finally {// 5.关闭资源if(sk != null) {try {sk.close();} catch (IOException e) {e.printStackTrace();}}}}
}===========================================================import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;public class E5_TCP_Server {public static void main(String[] args) throws IOException {// 可以实现多用户上传数据【多线程】// 客户端:将本地文件上传到服务器,后接收服务器的反馈// 服务器:接收客户端上传的文件,上传完毕后给出反馈// 创建线程池对象ThreadPoolExecutor pool = new ThreadPoolExecutor(3, // 核心线程数量16, // 线程池总大小60, // 空闲时间TimeUnit.SECONDS, // 单位时间(单位)new ArrayBlockingQueue<>(2), // 阻塞队列Executors.defaultThreadFactory(), // 线程工厂new ThreadPoolExecutor.AbortPolicy() // 拒绝策略);// 1.创建对象并绑定端口ServerSocket ss = new ServerSocket(10086);while(true) {// 2.等待客户端连接Socket sk = ss.accept();// 每有一个用户就开启一个线程// 普通创建线程//new Thread(new E5_TCP_MyRunnable(sk)).start();// 使用线程池pool.submit(new E5_TCP_MyRunnable(sk));}}
}

运行结果:
在这里插入图片描述

TCP通信练习7 — BS架构模型(接受浏览器的消息并打印)

在这里插入图片描述
代码跟练习1的Server代码一样,只是客户端变为了浏览器,在浏览器里面输入127.0.0.1:对应的端口号即可实现

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class E1_TCP_Server {public static void main(String []args) throws IOException {ServerSocket ss = new ServerSocket(10086);Socket sk = ss.accept();InputStream is = sk.getInputStream();InputStreamReader isr = new InputStreamReader(is);int c;while((c=isr.read())!=-1) {System.out.print((char)c);}System.out.println();sk.close();ss.close();}
}

运行结果:
在这里插入图片描述


如果我的内容对你有帮助,请 点赞 评论 收藏 。创作不易,大家的支持就是我坚持下去的动力!

在这里插入图片描述

http://www.dtcms.com/a/494421.html

相关文章:

  • OpenCL初级教程
  • 【Spring AI】基于 sse 实现 MCP Server
  • vue使用限制仅允许上传 Excel 文件
  • dataease开发环境搭建
  • 一个网站开发周期wordpress导航条
  • 湖南城乡建设厅网站夜蝶直播app
  • list,咕咕咕!
  • iOS 混淆实战,多工具组合完成 IPA 混淆与加固(源码 + 成品 + 运维一体化方案)
  • Vue + Element UI 实现 el-scroll 滚动与鼠标滚轮监听全攻略
  • vue2版本的ruoyi-ui中使用vxe-table插件
  • 全国建设网站郑州seo优化公司
  • 用观察者模式通知UI刷新数据
  • 基于 AI 大模型的 UI 元素定位浏览器插件
  • Prism框架核心对象全解析
  • 阿里云服务器上部署Mosquitto
  • Android 设计模式实战手册(Kotlin 实战版)
  • Android thermal (5)_cooling device(下)
  • 活字格低代码平台实现移动端应用(安卓 /iOS)打包的技术方案与实践指南
  • SpringBoot电子商城系统
  • 解析 Qt Remote Objects:从框架原理到 Repcs 实践,以正点原子 RK3588 UI 系统为例
  • 【底层机制】【Android】Binder架构与原理
  • 揭阳市住房和城乡建设局网站网站类游戏网站开发
  • DeviceNet 转 MODBUS TCP罗克韦尔 ControlLogix PLC 与上位机在汽车零部件涂装生产线漆膜厚度精准控制的通讯配置案例
  • 【STM32项目开源】基于STM32的智能衣柜系统
  • python基于web的汽车班车车票管理系统/火车票预订系统/高铁预定系统 可在线选座
  • ssh终端管理多个k8s集群,快速切换配置
  • 景德镇建站公司全国建筑四库一平台
  • 奥运网站模板wordpress在 分栏
  • toLua[七] Examples 06_LuaCoroutine2分析
  • CAD如何生成等高线