java网络编程小结(黑马程序员基础java总结)
网络编程三要素
1.IP地址
IP地址就相当于茫茫信息大海中的灯塔,需要识别到这个标志才可以和对应的计算机进行网络通讯
2.端口
网络通讯其实就是两个应用程序的通讯,每台计算机上有很多程序,端口就是为了区分这些程序
3.协议
计算机网络中也要遵守一系列规则协议,这里主要介绍的是UDP协议和TCP协议
UDP网络协议
概述:UDP是无连接的通讯,当一台计算机向另一台计算机发送数据的时候,发送端不会确认接收端是否存在,就会发送数据,也不需要任何反馈该数据是否已经发送
UDP协议消耗资源小,通讯效率高,常常用作音频,视频和普通数据的传输,例如视频会议通常采用UDP协议,即便偶然丢失一两个数据包,也不会有太大的影响
接受和发送数据大致方法
UDP发送数据
- 创建发送端的Socket对象
- 创建数据,并且把数据打包
- 调用DatagramSocket对象的方法发送数据
- 关闭发送端
UDP接受数据
- 创建接收端的Socket对象
- 创建一个数据包,用于接受数据
- 调用DatagramSocket对象的方法接受数据
- 解析数据包,并把数据在控制台显示
- 关闭接收端
获取主机IP地址代码
public static void main(String[] args) throws UnknownHostException {//public static InetAddress getByName(String host):确定主机名称的IP地址,可以是机器名称,也可以是IP地址InetAddress address=InetAddress.getByName("IP地址");//public String getHostName():获取此IP地址的主机名String name=address.getHostName();//public String getHostAddress():返回文本显示中的IP地址字符串String ip=address.getHostAddress();System.out.println("主机名:"+name);System.out.println("IP地址:"+ip);}
}
发送和接受数据
无论使用哪种协议,程序都要有一个客户端,一个服务器,客户端发送数据,服务器接受数据。在UDP中不存在服务器,但是也需要一个发送端和一个接受端,而且运行时要保证先打开接受端(服务器),再开启发送端(客户端)
发送端
public static void main(String[] args) throws IOException {//创建发送端的Socket对象//DatagramSocket()构造数据报套接字并将其绑定到本地主机的任何可用端口DatagramSocket ds=new DatagramSocket();//创建数据,并把数据打包//DatagramPacket(byte[] buf,int length, InetAddress address, int port)//构造一个数据包,发送长度为Length的数据包到指定主机上的指定端口号byte[] bys="hh".getBytes();DatagramPacket dp=new DatagramPacket(bys,bys.length, InetAddress.getByName("IP地址"),30085);//调用DatagramSocket对象的方法发送数据ds.send(dp);//关闭发送端ds.close();}
接受端
public static void main(String[] args) throws IOException {//创建接收端的Socket对象//DatagramSocket(int port)构造数据报套接字并将其绑定到本地主机上的指定端口DatagramSocket ds=new DatagramSocket(30085);//创建一个数据包,用于接受数据//DatagramPacket(byte[] buf,int length)构造一个DatagramPacket用于接受长度为length的数据包byte[] bys=new byte[1024];DatagramPacket dp=new DatagramPacket(bys,bys.length);//调用DatagramSocket对象的方法接受数据ds.receive(dp);//解析数据包,并且把数据在控制台上显示//byte[] getData()返回数据缓冲区byte[] datas=dp.getData();System.out.println("数据是:"+new String(datas,0,dp.getLength()));//关闭接收端ds.close();}
通讯程序
作为一个简短的网络聊天室
发送端
public static void main(String[] args) throws IOException {//创建发送端的Socket对象DatagramSocket ds=new DatagramSocket();//自己封装键盘录入数据BufferedReader br=new BufferedReader(new InputStreamReader(System.in));String line;while((line=br.readLine())!=null){//输入886,结束if ("886".equals(line)){break;}//创建数据,把数据打包byte[] bys=line.getBytes();DatagramPacket dp=new DatagramPacket(bys,bys.length, InetAddress.getByName("IP地址"),12345);ds.send(dp);}ds.close();}
接收端
接受端使用while死循环就是为了保证接受端可以保持一直开启的状态
public static void main(String[] args) throws IOException {//创建接收端的Socket对象DatagramSocket ds=new DatagramSocket(12345);while (true){//创建一个数据包,用于接受数据byte[] bys=new byte[1024];DatagramPacket dp=new DatagramPacket(bys,bys.length);//调用DatagramSocket对象的方法接受数据ds.receive(dp);//解析数据包System.out.println("数据是:"+new String(dp.getData(),0,dp.getLength()));}}
TCP网络协议
概述:TCP协议是面向连接的通讯协议,传输数据之前,在发送端和接收端建立逻辑链接,他提供了可靠无差错的数据传输,每次连接的创建都需要“三次握手”
第一次:客户端想服务器发出连接请求,等待服务器确认
第二次:服务器向客户端回送一个响应,通知客户端收到了连接请求
第三次:客户端再次向服务器发送确认信息,确认链接
接受和发送数据的大致方法
发送数据
- 创建客户端的Socket对象
- 获取输出流,写数据
- 释放资源
接受数据
- 创建服务器端的Socket对象
- 监听客户端连接,返回一个Socket读一下
- 获取输入流,读数据,并把数据显示在控制台
- 释放资源
发送和接受数据(有反馈)
客户端
public static void main(String[] args) throws IOException {//创建客户端的Socket对象(Socket)Socket s=new Socket("IP",11222);//获取输出流,写数据OutputStream os=s.getOutputStream();os.write("hello,tcp".getBytes());//接受服务器反馈InputStream is=s.getInputStream();byte[] bys=new byte[1024];int len=is.read(bys);String data=new String(bys,0,len);System.out.println("客户端:"+data);s.close();}
服务器
public static void main(String[] args) throws IOException {//创建服务器端的Socket对象(ServerSocket)//ServerSocket(int port)创建绑定到指定端口的服务器套接字ServerSocket ss=new ServerSocket(11222);//Socket accept()侦听要连接到此套接字并接受它Socket s=ss.accept();//获取输入流,读数据,并把数据显示在控制台InputStream is=s.getInputStream();byte[] bys=new byte[1024];int len=is.read(bys);String data=new String(bys,0,len);System.out.println("服务器:"+data);//给出反馈OutputStream os=s.getOutputStream();os.write("数据已经收到".getBytes());//释放资源s.close();ss.close();}
传输数据
键盘录入上传
客户端
public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s=new Socket("IP",13333);//数据来自于键盘录入,直到输入的数据是886,发送数据结束BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//封装输出流对象BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while ((line=br.readLine())!=null){if ("886".equals(line)){break;}bw.write(line);bw.newLine();bw.flush();}//释放资源s.close();}
服务器
public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss=new ServerSocket(13333);//监听客户端连接,返回一个对应的Socket对象Socket s=ss.accept();//获取输入流BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));String line;while ((line=br.readLine())!=null){System.out.println(line);}//释放资源ss.close();}
客户端数据来自文本文件
客户端
public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s=new Socket("IP",12340);//封装文本文件数据BufferedReader br=new BufferedReader(new FileReader("D:\\Java\\笔记\\java网络编程\\bw.txt"));//封装输出流写数据BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while ((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}//释放资源br.close();s.close();}
服务器
public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss=new ServerSocket(12340);//监听客户端连接,返回一个对应的Socket对象Socket s=ss.accept();//获取输入流BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));String line;while ((line=br.readLine())!=null){System.out.println(line);}//释放资源ss.close();}
服务器数据写入文件
客户端
public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s=new Socket("IP",12345);//数据来自于键盘录入,直到输入的数据是886,发送数据结束BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//封装输出流对象BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while ((line=br.readLine())!=null){if ("886".equals(line)){break;}bw.write(line);bw.newLine();bw.flush();}//释放资源s.close();}
服务器
public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss=new ServerSocket(12345);//监听客户端连接,返回一个对应的Socket对象Socket s=ss.accept();//接受数据BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//把数据写入文件BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\Java\\笔记\\java网络编程\\bw.txt"));String line;while ((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}//释放资源bw.close();ss.close();}
上传文件给服务器
客户端
public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s=new Socket("IP",32341);//封装文本文件数据BufferedReader br=new BufferedReader(new FileReader("D:\\Java\\笔记\\java网络编程\\src\\UDP获取主机IP地址\\InnetAddressDemo.java"));//封装输出流写数据BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while ((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}//释放信号给服务器,我写完了s.shutdownOutput();//接受反馈BufferedReader brClient=new BufferedReader(new InputStreamReader(s.getInputStream()));String data=brClient.readLine();//等待读取数据System.out.println("服务器的反馈:"+data);//释放资源br.close();s.close();}
接收端
public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss=new ServerSocket(32341);//监听客户端连接,返回一个对应的Socket对象Socket s=ss.accept();//接受数据BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//把数据写入文本文件BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\Java\\笔记\\java网络编程\\bw1.java"));String line;while ((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}BufferedWriter bwServer=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上传成功");bwServer.newLine();bwServer.flush();bw.close();ss.close();}
多线程上传文件
核心思想在于模拟多个客户端给服务器上传文件,每开启一个接口相当于开启一个新的线程
客户端
public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s=new Socket("127.0.0.1",33445);//封装文本文件数据BufferedReader br=new BufferedReader(new FileReader("D:\\Java\\笔记\\java网络编程\\bw.java"));//封装输出流写数据BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}s.shutdownOutput();//接受反馈BufferedReader brClient=new BufferedReader(new InputStreamReader(s.getInputStream()));String data=brClient.readLine();//等待读取数据System.out.println("服务器的反馈"+data);//释放资源br.close();s.close();}
服务器
public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss=new ServerSocket(33445);while (true){//监听客户端连接,返回一个Socket对象Socket s= ss.accept();//为每一个客户端开启一个线程new Thread(new ServerThread(s)).start();}}
线程
实现Runnable接口,创建新的线程
public class ServerThread implements Runnable{private Socket s;public ServerThread(Socket s){this.s=s;}@Overridepublic void run() {try{//接受数据写到文本文件BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
// BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\Java\\笔记\\java网络编程\\bw.java"));//解决重名问题int count=0;File file=new File("D:\\Java\\笔记\\java网络编程\\bw["+count+"].java");while (file.exists()){count++;file=new File("D:\\Java\\笔记\\java网络编程\\bw["+count+"].java");}BufferedWriter bw=new BufferedWriter(new FileWriter(file));String line;while ((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}//给出反馈BufferedWriter bwServer=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上传成功");bwServer.newLine();bwServer.flush();//释放资源s.close();}catch (IOException e){e.printStackTrace();}}
java网络编程小结(黑马程序员基础java总结)相关推荐
- java的套娃汇总(黑马程序员基础java总结)
java里面存在很多套娃关系,这里对于基础的套娃做一个小小的总结 对象调用 对象调用顾名思义就是new一个新的对象出来,在主程序中调用 设想一个场景,我要定义一个手机对象,里面有牌子,价格,和一些其他 ...
- 黑马程序员:Java基础总结----Java语言编程规范
黑马程序员:Java基础总结 Java语言编程规范:参考自SUN公司文档 ASP.Net+Android+IO开发..Net培训.期待与您交流! I. 排版规范 A. 规 ...
- 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)
黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...
- 黑马程序员入学Java知识——精华总结
黑马程序员入学Java知识--精华总结 J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结! 一.黑马程序员-java概述与基础知识 6 1.何为编程? 6 2.Java语言 ...
- 解析python网络爬虫pdf 黑马程序员_正版 解析Python网络爬虫 核心技术 Scrapy框架 分布式爬虫 黑马程序员 Python应用编程丛书 中国铁道出版社...
商品参数 书名:Python应用编程丛书:解析Python网络爬虫:核心技术.Scrapy框架.分布式爬虫 定价:52.00元 作者:[中国]黑马程序员 出版社:中国铁道出版社 出版日期:2018-0 ...
- Java语法快速学习-黑马程序员(个人整理版本)
Java入门基础视频教程,java零基础自学首选黑马程序员Java入门教程(含Java项目和Java真题)_哔哩哔哩_bilibili为了帮助广大对Java有兴趣和立志进入本行业的零基础学员,本套课程 ...
- Java网络编程小结
1 网络编程概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接,联网的底层细 ...
- 黑马程序员之Java集合类详解
android培训 java培训 期待与您交流! Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Ele ...
- C++核心编程(黑马程序员视频个人总结)
C++核心编程 1.内存分区模型 1.1.1.四个区 代码区:存放函数体的二进制代码,由操作系统进行管理----共享.只读 全局区:存放全局变量.静态变量及常量,常量区中存放const修饰的全局变量和 ...
- JAVA开发环境搭建-黑马程序员(个人整理版本)
Java语言概述 Java环境搭建:JDK安装.常用命令 补充几个命令行窗口的常用命令(记一下) Java入门程序: HelloWorld C:\Java\code新建一个HelloWorld.jav ...
最新文章
- 超卖 100 瓶茅台的事故分析
- 测试香港服务器访问速度的方法
- 超市收银程序_超市收银系统案例|千平超市再开2家,星耀助力门店年关创收...
- html5前端裁剪图片,FocusPoint.js 实现图片的响应式裁剪
- 搜索引擎优化的关键字工具
- vue 手写签名_签名模仿,把握好三个“度”!
- python绘图坐标轴|刻度值|刻度||标题设置
- Java实现 俄罗斯方块(简陋版)
- 【IoT】STM32 启动代码汇编指令详解
- ab测试post如何用文件提交json格式的参数
- 碳化硅纳米线,SiC纳米线(SiC nanowires),SiC短纤维(SiC fiber),SiC晶须(SiC whiskers)的主要应用方向,检测XRD图谱
- 写运维实习生第五周实习周报,包括心得体会和下周计划,多于300字
- C#实现自己的远程桌面控制工具
- 如何从0到1组建敏捷团队?
- 信息系统项目管理师(2022年)—— 重点内容:10大管理、5大过程组、47个过程信息汇总
- May 18:PHP 函数
- Postman的应用——入门应用
- ACCESS在程序运行中实时更新查询列表的条件
- Tensorflow2实现人脸关键点检测算法PFLD——一个精度高,速度快,模型小的人脸关键点检测模型
- iOS开发笔记(二)
热门文章
- matlab仿真零中频接收机技术,经典又实用的零中频接收机的技术解决方案
- 【干货】跨端体验度量的思考与实现(含直播回放)
- Windows系统win10系统压缩解压软件推荐
- MySQL数据库入门学习 #CSDN博文精选# #IT技术# #数据库# #MySQL#
- 各省简称 拼音 缩写_中国省会城市拼音名称及缩写
- ASCII码对照表(二进制、十进制、十六进制)
- 保密工作中非密计算机工具检查,【保密知识】别在保密工作面前耍“小聪明”哦~...
- 智能电话机器人源码安装 部署好后,人工智能电话机器人,不仅仅是打电话而已!
- 紧急通知:阿里聚合直播盒子APP源码2019年5月以前的版本BUG
- 高校水电费管理系统C语言课程设计