【狂神Java笔记】Java网络编程实战详细笔记整理(附代码)
1.1 概述
计算机网络:
计算机网络是指将地理位置不同 的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
网络编程的目的:
无线电台…传播交流信息
想要达到这个效果需要什么:
1.如何准确的定位网络上的一台主机192.168.16.124:端口,定位到这个计算机上的某个资源
2.找到了这个主机,如何传输数据呢?
javaweb:网页编程 B/S
网络编程:TCP/P C/S
1.2 网络通信的要素
如何实现网络的通信?
通信双方地址
- ip
- 端口号
- 192.168.16.124:5900
OSI模型
小结:
1、网络编程中有两个主要的问题
- 如何准确的定位到网络上的一台或者多台主机
- 找到主机之后如何进行通信
2、网络编程中的要素
- IP和端口号 IP
- 网络通信协议 UDP TCP
3、万物皆对象
1.3 IP
ip 地址: netAddress
1、唯一定位一台网络上计算机
2、127.0.0.1:本机 localhost
3、ip 地址的分类
ipv4/ ipV6
- IPV41270.0.1, 4个字节组成。 0-255 42亿~ 30亿都在北美,亚洲4亿。 2011年就用尽公网私网
- IPV6:128位。8个无符号整数!
公网(互联网)-私网(局域网)
- ABCD类地址
- 192.168.X.XX,专门给组织内部使用的
域名:记忆IP问题!
package com.blue.lesson01;import java.net.InetAddress;
import java.net.UnknownHostException;public class TextInetAddress {public static void main(String[] args) {try {//查询本机地址InetAddress interaddress1 = InetAddress.getByName("127.0.0.1");System.out.println(interaddress1);InetAddress interaddress3 = InetAddress.getByName("localhost");System.out.println(interaddress1);InetAddress interaddress4 = InetAddress.getLocalHost();System.out.println(interaddress1);//查询网站IP地址InetAddress interaddress2 = InetAddress.getByName("www.baidu.com");System.out.println(interaddress2);//常用方法System.out.println(interaddress2.getAddress());System.out.println(interaddress2.getCanonicalHostName()); //规范的名字System.out.println(interaddress2.getHostAddress()); //ipSystem.out.println(interaddress2.getHostName()); //域名,或者自已电脑的名字} catch (UnknownHostException e) {e.printStackTrace();}}}
1.4 端口
端口表示计算机上的一个程序的进程:
1、不同的进程有不同的端口号,用来区分软件!
2、被规定0-65535
3、TCP,UDP:65535 * 2 tcp:80,udp:80 吗,单个协议下,端口号不能冲突
4、端口分类
- 公有端口 0~1023
- Http: 80
- Https: 443
- FTP: 21
- Telent: 23
5、程序注册端口:1024-49151,分配用户或者程序
- Tomcat: 8080
- MySQL: 3306
- Oracle: 1521
6、动态、私有: 49152~65535
netstat-ano #查看所有的端口
netstat-ano|findstr"5900" #查看指定的端口
task1ist|findstr"8696" #查看指定端口的进程
package com.blue.lesson01;import java.net.InetSocketAddress;public class TextInetSocketAddress {public static void main(String[] args) {InetSocketAddress socketAddress1 = new InetSocketAddress("127.0.0.1", 8080);InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 8080);System.out.println(socketAddress1);System.out.println(socketAddress2);System.out.println(socketAddress1.getAddress());System.out.println(socketAddress1.getHostName());System.out.println(socketAddress1.getPort()); //端口}
}
1.5 通信协议
协议:约定,就好比我们现在说的是普通话。
网络通信协议:速率,传输码率,代码结构,传输控制
问题:非常的复杂?
TCPIP 协议簇
重要
- TCP:用户传输协议
- UDP:用户数据报协议
IP:网络互连协议
TCP UDP 对比
TCP:打电话
- 连接,稳定
- 三次握手 四次挥手
- 客户端、服务端
- 传输完成,释放连接,效率低
UDP:发短信
- 不连接,不稳定
- 客户端、服务端 没有明确的界限
- 不管有没有准备好,都可以发给你
- 导弹
- DDOS:洪水攻击!r(饱和攻击)
三次握手和四次挥手
三次握手和四次挥手(面试必问) - My_Dreams - 博客园 (cnblogs.com)
1.6 TCP
客户端
- 连接服务器 Socket
- 发送消息
服务器
建立服务的端口 Serversocket
等待用户的链接 accept
接收用的湖息
客户端:
package com.blue.lesson02;import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;//客户端
public class TcpClientDemo01 {public static void main(String[] args) {InetAddress serverIP = null;Socket socket = null;OutputStream os = null;try {//1.要知道服务器的地址serverIP = InetAddress.getByName("127.0.0.1");int port = 9999;//2.创建一个socket连接socket = new Socket(serverIP,port);//3.发送消息IO流os = socket.getOutputStream();os.write("你好,欢迎学习狂神说Java".getBytes());} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}if (socket == null) {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
服务端:
package com.blue.lesson02;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;//服务器
public class TcpServerDemo01 {public static void main(String[] args){ServerSocket serverSocket = null;Socket socket = null;InputStream is = null;ByteArrayOutputStream baos = null;try {///1,我得有一个地址serverSocket = new ServerSocket(9999);//2.等待客户端连接过来while (true){socket = serverSocket.accept();//3.读收客户端的消息is = socket.getInputStream();//管道流baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer))!=-1){baos.write(buffer,0,len);}System.out.println(baos.toString());}} catch (IOException e) {e.printStackTrace();} finally {if (baos!=null){try {baos.close();} catch (IOException e) {e.printStackTrace();}}if (is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null) {try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket != null) {try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
文件上传
客户端:
package com.blue.lesson02;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;public class TcpClientDemo02 {public static void main(String[] args) throws Exception {//1.创一个 Socket 连接Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);//2. 创建一个输出流OutputStream os = socket.getOutputStream();//3. 文件流FileInputStream fis = new FileInputStream(new File("cat-6723256.jpg"));//4.文件输出byte[] buffer = new byte[1024];int len;while ((len=fis.read(buffer))!=-1){os.write(buffer,0,len);}//通知服务器,我已经结束了socket.shutdownOutput();//确定服务器接收完体,才能够断开连按InputStream inputStream = socket.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer2 = new byte[1024];int len2;while ((len2=inputStream.read(buffer2))!=-1){baos.write(buffer2,0,len2);}System.out.println(baos.toString());//5.关闭资源baos.close();inputStream.close();fis.close();os.close();socket.close();}}
服务端:
package com.blue.lesson02;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class TcpServerDemo02 {public static void main(String[] args) throws IOException {//1.创建服务ServerSocket serverSocket = new ServerSocket(9000);//2.监听客户端连接Socket socket = serverSocket.accept();//3.获取输出流InputStream is = socket.getInputStream();//4.文件输出FileOutputStream fos = new FileOutputStream(new File("receive.jpg"));byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer))!=-1){fos.write(buffer,0,len);}//通知客户端我接收完华了OutputStream os = socket.getOutputStream();os.write("我接收完毕了,你可以断开了".getBytes());//关闭资源fos.close();is.close();socket.close();serverSocket.close();}
}
Tomacat
服务端
- 自定义S
- Tomcat 服务器S Java后台开发!
客户端
- 自定义C
- 浏览器B
Tomcat 下载与安装:Tomcat下载和安装(图解) (biancheng.net)
1.7 UDP
发送消息
客户端:
package com.blue.lesson03;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;//不而要连接服务器
public class UdpClientDemo01 {public static void main(String[] args) throws Exception {//1.建立一个 SocketDatagramSocket socket = new DatagramSocket();//2.建个包String msg = "你好啊,服务器!";int port = 9090;//发送给谁InetAddress localhost = InetAddress.getByName("localhost");DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);//3.发送包socket.send(packet);//4.关闭流socket.close();}
}
服务端:
package com.blue.lesson03;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpServerDemo01 {public static void main(String[] args) throws Exception {//开放端口DatagramSocket socket = new DatagramSocket(9090);// 接收数据byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);socket.receive(packet);//阻塞接收System.out.println(packet.getAddress().getHostAddress());System.out.println(new String(packet.getData(),0,packet.getLength()) );System.out.println(packet);//关闭连接socket.close();}
}
循环发送消息
发送端:
package com.blue.chat;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;public class UdpSenderDemo01 {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(8888);//准备数据:控制台读收 System.inBufferedReader reader = new BufferedReader(new InputStreamReader(System.in));while (true){String data = reader.readLine();byte[] datas = data.getBytes();DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 6666));socket.send(packet);if (data.equals("bye")){break;}}socket.close();}
}
接收端:
package com.blue.chat;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpReceiveDemo01 {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(6666);while (true){//准备接受包裹byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container, 0, container.length);socket.receive(packet);//阻塞式接受包裹//断开连接byte[] data = packet.getData();String receiveData = new String(data, 0, packet.getLength());System.out.println(receiveData);if (receiveData.equals("bye")){break;}}socket.close();}
}
在线咨询
发送端
package com.blue.chat;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;public class TalkSend implements Runnable{DatagramSocket socket = null;BufferedReader reader = null;private int fromPort; //对方端口号private String toIP; //private int toPort;public TalkSend(int fromPort, String toIP, int toPort) {this.fromPort = fromPort;this.toIP = toIP;this.toPort = toPort;try {socket = new DatagramSocket(fromPort);reader = new BufferedReader(new InputStreamReader(System.in));}catch (Exception e){e.printStackTrace();}}@Overridepublic void run() {while (true){try {String data = reader.readLine();byte[] datas = data.getBytes();DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIP, this.toPort));socket.send(packet);if (data.equals("bye")){break;}}catch (Exception e){e.printStackTrace();}socket.close();}}
}
接收端
package com.blue.chat;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class TalkReceive implements Runnable{DatagramSocket socket = null;private int port;private String msgFrom;public TalkReceive(int port,String msgFrom) {this.port = port;this.msgFrom = msgFrom;try {socket = new DatagramSocket(port);} catch (SocketException e) {e.printStackTrace();}}@Overridepublic void run() {while (true){try {//准备接受包裹byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container, 0, container.length);socket.receive(packet);//阻塞式接受包裹//断开连接byte[] data = packet.getData();String receiveData = new String(data, 0, packet.getLength() );System.out.println(msgFrom+": "+receiveData);if (receiveData.equals("bye")){break;}} catch (IOException e) {e.printStackTrace();}}socket.close();}
}
学生线程
package com.blue.chat;public class TalkStudent {public static void main(String[] args) {//开启两个线程new Thread(new TalkSend(7777,"localhost",9999)).start();new Thread(new TalkReceive(8888,"老师")).start();}}
老师线程
package com.blue.chat;public class TalkTeacher {public static void main(String[] args) {//开启两个线程new Thread(new TalkSend(5555,"localhost",8888)).start();new Thread(new TalkReceive(9999,"学生")).start();}
}
1.8 URL
https://www.baidu.com
统一资源定位符:定位资源的,定位互联网上的某一个资源
DNS域名解析——www.baidu.comb xxx.x.x…x
协议://ip地址:端口/项目名/资源
package com.blue.lesson04;import java.net.MalformedURLException;
import java.net.URL;public class URLDemo01 {public static void main(String[] args) throws MalformedURLException {URL url = new URL("http://localhost:8080/helloworld/index.jsp?username=kuangshen&password=123");System.out.println(url.getProtocol()); //协议System.out.println(url.getHost()); //主机System.out.println(url.getPort()); //端口System.out.println(url.getPath()); //路径System.out.println(url.getFile()); //文件 全路径System.out.println(url.getQuery()); //URL查询名字 参数}
}
下载资源:
package com.blue.lesson04;import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;public class URLDown {public static void main(String[] args) throws Exception {//1.下我地址URL url = new URL("https://m701.music.126.net/20220123220857/b014483528776645552494faff4733a0/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/11506531065/c33e/3db1/f24c/d25af884b0dc20c1179631516e93341a.m4a");//2.连接到这个资源 HTTPHttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();InputStream inputStream = urlConnection.getInputStream();FileOutputStream fos = new FileOutputStream("y.m4a");byte[] buffer = new byte[1024];int len;while ((len=inputStream.read(buffer))!=-1){fos.write(buffer,0,len); //写出这个数据}fos.close();inputStream.close();urlConnection.disconnect(); //断开连接}
}
【狂神Java笔记】Java网络编程实战详细笔记整理(附代码)相关推荐
- 《亿级流量JAVA高并发与网络编程实战》笔记--------更新中
<亿级流量JAVA高并发与网络编程实战>笔记 第一章 高并发概述 "高并发技术" 是一个广义的概念,是指一种高效的地实现并发需求的解决方案,是技术领域的名称,可以包含架 ...
- 微信支撑10亿用户背后核心技术:亿级流量Java并发与网络编程实战
大家可能不知道,支撑微信10亿用户之后,最基础也是最核心的技术是什么?那就是网络编程. 越是大型互联网通讯项目,越是对网络编程的落地要求越高.落地,意味着对实战的要求更高. 所以,一些朋友更喜欢用类似 ...
- java马士兵网络编程_学习笔记-马士兵java - 网络编程
1. 网络基础 a. 计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地相互传递信息,共享硬件.软件.数据信息等资源. ...
- java网络编程技术学习笔记(b站【狂神说Java】网络编程实战讲解)
b站视频链接:[狂神说Java]网络编程实战讲解 文章目录 网络编程 1.1.概述 1.2.网络通信的要素 1.3.IP 1.4.端口 1.5.通信协议 1.6.TCP 文件发送 1.7.UDP 1. ...
- Java并发编程实战_阿里P9整理分享的亿级流量Java高并发与网络编程实战PDF
前言 为了帮助初级开发者快速掌握高并发.网络编程.微服务.海量数据的处理这些实用技术,本文以"理论+范例"的形式对各个知识点进行了详细的讲解,力争让读者在实践中快速掌握相关知识. ...
- 阿里P9整理分享的亿级流量Java高并发与网络编程实战PDF
前言 有人调侃我们说: 程序员不如送外卖.送外卖是搬运食物,自己是搬运代码,都不产出新的东西-- 透支体力,又消耗健康,可替代性极强,30岁之后就要面临被优化的危险-- 想跳槽,但是更高的平台难进,同 ...
- 【java笔记】网络编程概述
[java笔记]TCP通信程序_m0_52043808的博客-CSDN博客 [java笔记]网络编程:文件上传案例_m0_52043808的博客-CSDN博客 网络编程: 在一定协议下,实现两台计算机 ...
- Java基础学习笔记之网络编程
Java基础之网络编程 1.网络编程概述 什么是网络编程 指的是在多个设备(计算机)执行,其中的设备使用一个网络中的所有连接到对方编写程序 网络编程的目的 与其他计算机进行通信 网络编程的问题 1.如 ...
- Java进阶之网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
最新文章
- 智源发布:2021 年十大人工智能技术趋势【附下载链接】
- MyBatis知多少(6)表现层与业务逻辑层
- 使用批处理查看.class文件内容--javap指令
- RedHat/Centos修改root密码
- Juice Extractor dp
- VUE初始化一个项目
- day10:函数进阶
- Windows:chm 文件打开出现“已取消到该网页的导航”的解决方案
- C语言 字符串转结构体,字符串指针转化为结构体指针!
- adobe acrobat看PDF文档显示字体发虚,有毛刺的解决办法
- 系统初始化SHELL脚本
- 蓝桥杯每日真题之砝码称重(01背包)
- 【读书笔记】企业IT架构转型之道 阿里巴巴中台战略思想和架构实战
- 强大的USB协议分析工具
- 测井储层参数预测+人工智能方法
- 使用scrapy爬取dota2贴吧数据并进行分析
- 浅谈 Spring 中的设计模式
- halcon之屌炸天的自标定(2)
- Unity漫延的实现思路(流体漫延, 火烧草地的漫延等)
- 打印机 linux 共享文件夹,linux 连接windows打印机
热门文章
- intel编译器免费下载
- EPPlus批量插入图片到Excel
- Win7秘籍 如何用压缩卷调整不合理分区
- android 电视语音遥控器,基于遥控器的Android电视语音聊天系统及其方法与流程
- 深夜来一发,拿走不谢
- matlab中除号的有效字符,乘号(x)、除号(÷)、双引号()等字符实体的HTML代码...
- 编程之路第11天:解决此前截屏权限需要手动点击确认问题(打开双线程)
- 【DEBUG】mxs-auart mxs-auart.0: Unhandled status 520080
- 简单三步实现给公众号添加附件
- Silane-PEG-NH2 氨基聚乙二醇硅烷 NH2-PEG-Silane结构式