Java网络编程学习
IP
ip 地址: netAddress
1. 唯一定位一台网络上计算机
2. 127.0.0.1:本机 localhost
3. ip 地址的分类
ipv4/ ipV6
- IPV41270.0.1, 4个字节组成。 0-255
- IPV6:128位,8个无符号整数
公网(互联网)-私网(局域网)
- ABCD类地址
- 192.168.X.XX,专门给组织内部使用的
域名:记忆IP问题
package web_Study;import java.net.InetAddress;
import java.net.UnknownHostException;public class returnIp {public static void main(String[] args) {try {//查询本机地址InetAddress inetaddress1=InetAddress.getByName("192.168.1.8");InetAddress inetaddress2=InetAddress.getLocalHost();InetAddress inetaddress3=InetAddress.getByName("localhost");System.out.println(inetaddress1);System.out.println(inetaddress2);System.out.println(inetaddress3);//查询网站IP地址InetAddress inetaddress4 =InetAddress.getByName("www.baidu.com");System.out.println(inetaddress4);//常用方法System.out.println(inetaddress4.getAddress());System.out.println(inetaddress4.getCanonicalHostName()); //规范的名字System.out.println(inetaddress4.getHostAddress()); //ipSystem.out.println(inetaddress4.getHostName()); //域名,或者自已电脑的名字} catch (UnknownHostException e) {throw new RuntimeException(e);}}
}
运行结果:
端口
端口表示计算机上的一个程序的进程:
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 web_Study;import java.net.InetSocketAddress;public class TextInetSocketAddress {public static void main(String[] args) {InetSocketAddress socketAddress1 = new InetSocketAddress("192.168.1.8", 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()); //端口}}
运行结果:
通信协议
协议:约定,就好比我们现在说的是普通话。
网络通信协议:速率,传输码率,代码结构,传输控制
问题:非常的复杂?
TCPIP 协议簇
重要
- TCP:用户传输协议
- UDP:用户数据报协议
IP:网络互连协议
TCP UDP对比
TCP:打电话
- 连接,稳定
- 三次握手 四次挥手
- 客户端、服务端
- 传输完成,释放连接,效率低
UDP:发短信
- 不连接,不稳定
- 客户端、服务端 没有明确的界限
- 不管有没有准备好,都可以发给你
- 导弹
- DDOS:洪水攻击(饱和攻击)
三次握手和四次挥手
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("你好,世界".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();}
}
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();}
}
URL
统一资源定位符:定位资源的,定位互联网上的某一个资源
DNS域名解析——www.baidu.comb xxx.x.x…x
协议://ip地址:端口/项目名/资源
Java网络编程学习相关推荐
- java 网络编程学习笔记
java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...
- Java网络编程学习——简单模拟在线聊天
Java网络编程学习--简单模拟在线聊天 学了java网络,也是该做个小案例来巩固一下了. 本次案例将使用UDP和多线程模拟即时聊天,简单练练手. 1.前提知识 需要知道简单的IO流操作,以及简单的U ...
- Java 网络编程学习复习总结(一)-2021.05.28
网络编程 什么是计算机网络? 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递 ...
- Java 网络编程学习笔记(三)—— URL 和 URI
一.URL URL是一个URI,除了标识一个资源,还会为资源提供一个特定的网络位置.然而通用的URI可以告诉你一个资源是什么,但是无法告诉你它在哪里以及如何得到这个资源. URL的语法: protoc ...
- 菜猪的JAVA 网络编程学习之Socket用法详解(上)
在客户/服务器通信模式中,客户端需要主动创建与服务器连接的Socket(套接字),服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可以看做是通信连接两端的收发器,服务器与 ...
- Java网络编程(一)网络的基本认知
前言 这是一个信息化的时代,在生活中,网络通信无处不在.比如发送短信,邮件,视频通话等. 以邮件为例子: ① 收件人: 相当于网络编程的ip地址+端口号,定位到某一个具体的地方!只有找对地方才可以成功 ...
- 15Java网络编程学习笔记
Java网络编程学习笔记 文章目录 1 网络基础 1.1 网络通信 1.2 网络 1.3 IP地址 1.5 域名 1.6 端口号 1.7 网络通信协议 1.8 TCP协议 1.9 UDP协议 2 In ...
- python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...
Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...
- 菜鸟学习笔记:Java提升篇9(网络1——网络基础、Java网络编程)
菜鸟学习笔记:Java提升篇9(网络1--网络基础.Java网络编程) 网络基础 什么是计算机网络 OS七层模型 Java网络编程 InetAddress InetSocketAddress URL类 ...
最新文章
- AI造假 vs AI打假 终结“猫鼠游戏”不能只靠技术
- OpenCV调整彩色图像的饱和度和亮度
- 初识OneNote 2016
- mysql 知识整理(待续)
- Boost.MultiIndex 复合键的例子
- 类文件到虚拟机(类加载机制)
- AJAX,只是一种过渡技术吗?
- linux使用gpio开一个线程,LINUX的gpio_request_one作用
- 2016年社招面试小结
- 综合实例_为啥要做“三维管线综合”?看个实例就明白
- 如何将日志配置文件放入到Apollo配置中心并支持热更新
- Linux下搭建mysql主从服务器
- 互联网女皇报告:拼多多美团崛起,支付宝微信同台竞技!
- 安装win2008R2系统并激活
- 游戏中MD5加密的一些作用
- WIN10开启Hyper-V虚拟化功能
- 链上链下协同的数据归档
- 2018 Android 框架汇总(转)
- oracle Net manger配置网络服务
- 【红楼梦诗词】葬花吟
热门文章
- java 验证手机号_Java使用正则表达式验证手机号和电话号码的方法
- python 爬取王者荣耀高清壁纸
- 金融行业网络架构与技术探讨
- js数组的方法和扩展运算符
- 面试经验//Java新手如何制定优秀的职业规划?看大牛怎么说!
- linux配置文件如何排序,Linux系统中sort排序命令的使用教程
- 使用vue/cli出现defineConfig is not function 错误
- 计算机基础知识实验内容及步骤,计算机基础实验报告要点.doc
- linux内存管理之 ION 内存管理器浅析Ⅰ(system heap)
- 天亮说晚安,我们回家