网络编程


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的网络编程实践相关推荐

  1. api有哪些 javasocket_基于java的socket编程及API解析

    一.socket通讯过程 1.socket与socket编程简介: socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台 ...

  2. JAVA的网络编程【转】

    转自 http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能 ...

  3. java的网络编程有用吗_十大有用但又偏执的Java编程技术

    java的网络编程有用吗 经过一段时间的编码(以我为例,大约20年左右,当您玩得开心时光飞逝),人们开始接受这些习惯. 因为,你知道... 任何可能出错的事情都会发生. 这就是为什么人们会采用&quo ...

  4. 西工大java高级网络编程_西工大16春《JAVA高级网络编程》平时作业

    西工大16春<JAVA高级网络编程>平时作业 7 o& [9 w  ^# D  Z一.单选题:[25道,总分:100分]5 z# ?* Z! M% M1 h4 R# n. D+ a ...

  5. 基于JAVA中文网络小说平台系统计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA中文网络小说平台系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA中文网络小说平台系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...

  6. JAVA基础 网络编程

    JAVA基础 网络编程 网络我们每天都会用到的,在我们生活中占的地位也在不断的提高,我们下面就简单了解下网络编程的内容. 想要学习网络编程,首先就需要了解网络编程包含哪些内容. 网络编程包括 IP节点 ...

  7. Java SE 网络编程

    Java SE 网络编程 目录 Java SE 网络编程 1.计算机网络概念 2.网络通讯协议 2.2.通讯接口 3.网络分层 3.2.OSI七层协议|TCP/IP五层协议 3.3 . 封装 3.4. ...

  8. 基于java的网络在线考试管理系统的设计与实现--毕业开题报告

    基于java的网络在线考试管理系 统的设计与实现开题报告–毕业设计 最近grace刚完成毕业设计 通过了赶紧来给宝贝们分享我的成果哈哈 设计题目:基于java的网络在线考试管理系统的设计与实现 一.选 ...

  9. 基于JAVA智友少儿编程学习平台计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA智友少儿编程学习平台计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA智友少儿编程学习平台计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...

最新文章

  1. Java中 this关键字详解
  2. java 值传递 和 引用传递
  3. js实现给html固定区域增加水印
  4. Intelij idea工具设置片,用64位工作,用32位运行
  5. torchvision0.2.2_Xcode 10.2
  6. Replace Type Code with Subclasses(以子类取代类型码)
  7. 【LeetCode笔记】141. 环形链表(Java、快慢指针、链表)
  8. Moody Photoshop Panel for mac(ps专业色彩调色扩展面板)
  9. JimuReport积木报表 — SQL数据源报表带参展示
  10. phpcms内容页 调用 上一级栏目id,catname等信息 - 代码篇
  11. 交换机工作原理_交换机你了解它吗?它工作原理是这样的
  12. 通过数据库方式访问excel 2007及其以后(xlsx)文件的连接字符串
  13. 解决SVN Files 的值“xxxxxxx .mine”无效 问题
  14. vue项目eslint配置
  15. CTreeCtrl 类的InsertItem成员函数
  16. 机器学习-模型评估方法sklearn对MINST数据集实现
  17. 批量导入经纬度点到奥维地图中
  18. SolidWorks工程图做到一半切换工程图模板的方法
  19. linux文件夹压缩与分卷压缩
  20. C Primer Plus 第02章 C语言概述 学习笔记及复习题、编程题解答

热门文章

  1. 使用conda安装python包
  2. iOS 多态和多继承
  3. 做完基线后centos /linux 系统修改密码报passwd: Module is unknown 未知模块 解决思路
  4. requestAnimationFrame运动框架实现播放中连续变速动画效果
  5. ubuntu系统搭建steam饥荒联机服务器
  6. 2018 美团校招笔试题详解
  7. m-audio keystation 88/61 midi键盘的走带控制器在cubase里面怎么用
  8. 解决gpedit问题
  9. 登录和第三方授权(Cookie和Authorization)
  10. 35页智慧安防小区管控系统 解决方案