基于Java的网络编程实践
网络编程
2.网络通信的两要素(如何实现网络的通信?)
地址(IP+端口号)
规则 (网络通信协议)TCP 、UTP
3. IP
IP地址 InetAddress
唯一定位一台网络上的计算机
127.0.0.1 本机localhost
IP地址的分类
Ipv4 / Ipv6
IPV4 四个字节 0-255 2011年已经用完
IPV6 八个无符号整数
公网IP 私网IP
192.168.xx.xx 一般都是局域网
import java.net.Inet4Address;
import java.net.UnknownHostException;
public class TestInetAdddress {public static void main(String[] args) {try {Inet4Address inet4Address = (Inet4Address) Inet4Address.getByName("localhost");System.out.println(inet4Address);//localhost/127.0.0.1
Inet4Address inet4Address1 = (Inet4Address) Inet4Address.getLocalHost();System.out.println(inet4Address1);//DESKTOP-5D4I4TV/172.20.10.2 电脑型号(主机名)} catch (UnknownHostException e) {e.printStackTrace();}}
}
4. 端口
端口概念
端口表示计算机上的一个程序的进程
不同的进程有不同的端口号,用这来区分软件
被规定为0-65536
TCP , UDP
5.通信协议
协议,约定,就好比我们说的普通话
网络通信协议: 速率 、 传输速率、代码结构 、 传输控制
问题:非常复杂?但我们通过分层来简化。
TCP/IP协议簇 :实际上是一组协议
重要
TCP:用户传输协议
UDP:用户数据报协议
出名的协议
TCP
IP :网际互联协议
6.TCP与UDP对比
TCP :打电话
连接 ,稳定
三次握手,四次挥手
//三次握手(最少需要三次) A:你愁啥 B:瞅你咋地? A:干一场 ! //四次挥手 A:我要走了 B:你真的要走了吗? B:你真的真的要走了吗? A:我真的要走了!
客户端,服务端
传输完成,释放连接,效率低
UDP :发短信
不连接 ,不稳定
客户端,服务端,没有明确的界限
不管有没有准备好,都可以发给你
导弹
DDOS :洪水攻击(饱和攻击)
7.TCP实现聊天 (打电话)
Client
public class TcpClient {//客户端public static void main(String[] args) throws IOException {Socket socket = null;OutputStream os = null;System.out.println("Client is running---------");try {//1.要知道服务器的ip和端口号InetAddress serverIP = InetAddress.getByName("127.0.0.1");int port=9999;//2.创建一个socket连接socket = new Socket(serverIP,port);//3.发送消息 IO流os = socket.getOutputStream();os.write("客户端:server你好,我是客户端长城!".getBytes());} catch (Exception e) {e.printStackTrace();}finally {socket.close();os.close();}}
}
Server
public class TcpServer {//服务器端public static void main(String[] args) throws IOException {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream =null;ByteArrayOutputStream baos = null;System.out.println("Server is running--------");try {//1.作为服务器,我得有一个地址 和端口serverSocket = new ServerSocket(9999);//2.等待客户端连接我socket = serverSocket.accept();//3.读取客户端发来的信息inputStream = socket.getInputStream();
//管道流(显式读取到得数据)baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];int len;while ((len=inputStream.read(buffer))!=-1){baos.write(buffer,0,len);}System.out.println(baos.toString());} catch (IOException e) {e.printStackTrace();}finally {serverSocket.close();socket.close();inputStream.close();baos.close();}}
}
8. TCP实现文件上传
-
9.初步认识tomcat
10. UDP 消息发送 (发短信)
发短信:不用连接,只需知道对方地址即可。
//模拟A向B发送短信
A:
public class UdpA {public static void main(String[] args) throws Exception {//1.创建socket,获取目标IP、PortDatagramSocket socket = new DatagramSocket();InetAddress localhost = InetAddress.getByName("127.0.0.1");//127.0.0.1即代表本主机int port = 8080;
//2.创建(准备)数据包String msg = "你好啊B,我是A, 恭喜你收到了我的短信!";
//数据内容、发送数据起始点 、发送数据的总长度、目标IP、目标端口portDatagramPacket dataPackage = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
//3.使用socket发送数据包socket.send(dataPackage);
//4.关闭socket资源socket.close();}
}
B:
public class UdpB {public static void main(String[] args) throws Exception {//1.开放端口-持续监听DatagramSocket socket = new DatagramSocket(8080);//2.接收数据包byte[] buffer = new byte[1024];DatagramPacket dataPacket = new DatagramPacket(buffer, 0, buffer.length);//接收方socket.receive(dataPacket);//3.显示数据包System.out.println(new String(dataPacket.getData()));//新建一个Stirng对象,以便显示数据//4.关闭连接socket.close();}
}
10. UDP在线聊天
1. 循环获取键盘输入+循环获取发送发的内容
(1)循环接收键盘输入
//模拟A向B发送短信场景
public class UdpA {public static void main(String[] args) throws Exception{//1.打开socket,获取目标ip与端口DatagramSocket socket = new DatagramSocket();InetAddress inetAddress = InetAddress.getByName("127.0.0.1");int port = 8080 ;
//2.准备数据包(讲原本写死的转换成键盘输入的)//String msg = "这里是A,呼叫B,听到请回答!";while(true){BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//获取键盘的输入String msg = reader.readLine();DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,inetAddress,port);
if(datagramPacket.getData().equals("bye")){break;}//3.发送数据包socket.send(datagramPacket);}
//4关闭资源socket.close();}
}
(2)循环接受发送方的内容
public class UdpB {
public static void main(String[] args) throws Exception{//1,使用socket,持续监听DatagramSocket socket = new DatagramSocket(8080);
while(true){//2.接收数据byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);socket.receive(packet);if (packet.getData().equals("bye")) {break;}//3.显示数据System.out.println(new String(packet.getData()));}//4.关闭资源socket.close();}
}
2. 引入多线程实现同时在线聊天
-
基于Java的网络编程实践相关推荐
- api有哪些 javasocket_基于java的socket编程及API解析
一.socket通讯过程 1.socket与socket编程简介: socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台 ...
- JAVA的网络编程【转】
转自 http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能 ...
- java的网络编程有用吗_十大有用但又偏执的Java编程技术
java的网络编程有用吗 经过一段时间的编码(以我为例,大约20年左右,当您玩得开心时光飞逝),人们开始接受这些习惯. 因为,你知道... 任何可能出错的事情都会发生. 这就是为什么人们会采用&quo ...
- 西工大java高级网络编程_西工大16春《JAVA高级网络编程》平时作业
西工大16春<JAVA高级网络编程>平时作业 7 o& [9 w ^# D Z一.单选题:[25道,总分:100分]5 z# ?* Z! M% M1 h4 R# n. D+ a ...
- 基于JAVA中文网络小说平台系统计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA中文网络小说平台系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA中文网络小说平台系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...
- JAVA基础 网络编程
JAVA基础 网络编程 网络我们每天都会用到的,在我们生活中占的地位也在不断的提高,我们下面就简单了解下网络编程的内容. 想要学习网络编程,首先就需要了解网络编程包含哪些内容. 网络编程包括 IP节点 ...
- Java SE 网络编程
Java SE 网络编程 目录 Java SE 网络编程 1.计算机网络概念 2.网络通讯协议 2.2.通讯接口 3.网络分层 3.2.OSI七层协议|TCP/IP五层协议 3.3 . 封装 3.4. ...
- 基于java的网络在线考试管理系统的设计与实现--毕业开题报告
基于java的网络在线考试管理系 统的设计与实现开题报告–毕业设计 最近grace刚完成毕业设计 通过了赶紧来给宝贝们分享我的成果哈哈 设计题目:基于java的网络在线考试管理系统的设计与实现 一.选 ...
- 基于JAVA智友少儿编程学习平台计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA智友少儿编程学习平台计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA智友少儿编程学习平台计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...
最新文章
- Java中 this关键字详解
- java 值传递 和 引用传递
- js实现给html固定区域增加水印
- Intelij idea工具设置片,用64位工作,用32位运行
- torchvision0.2.2_Xcode 10.2
- Replace Type Code with Subclasses(以子类取代类型码)
- 【LeetCode笔记】141. 环形链表(Java、快慢指针、链表)
- Moody Photoshop Panel for mac(ps专业色彩调色扩展面板)
- JimuReport积木报表 — SQL数据源报表带参展示
- phpcms内容页 调用 上一级栏目id,catname等信息 - 代码篇
- 交换机工作原理_交换机你了解它吗?它工作原理是这样的
- 通过数据库方式访问excel 2007及其以后(xlsx)文件的连接字符串
- 解决SVN Files 的值“xxxxxxx .mine”无效 问题
- vue项目eslint配置
- CTreeCtrl 类的InsertItem成员函数
- 机器学习-模型评估方法sklearn对MINST数据集实现
- 批量导入经纬度点到奥维地图中
- SolidWorks工程图做到一半切换工程图模板的方法
- linux文件夹压缩与分卷压缩
- C Primer Plus 第02章 C语言概述 学习笔记及复习题、编程题解答