网络编程

一、IP和端口号

一、网络编程中有两个主要的问题:1.如何准确地定位网络上一台或多台主机;定位主机上的特定的应用2.找到主机后如何可靠高效地进行数据传输二、网络编程中的两个要素:1.对应问题一:IP和端口号2.对应问题二:提供网络通信协议:TCP/IP参考模型(应用层、传输层、网络层、物理+数据链路层)三、通信要素一:IP和端口号1. IP:唯一的标识 Internet 上的计算机(通信实体)2. 在Java中使用InetAddress类代表IP3. IP分类:IPv4 和 IPv6 ; 万维网 和 局域网4. 域名:   www.baidu.com   www.mi.com  www.sina.com  www.jd.comwww.vip.com5. 本地回路地址:127.0.0.1 对应着:localhost6. 如何实例化InetAddress:两个方法:getByName(String host) 、 getLocalHost()两个常用方法:getHostName() / getHostAddress()7. 端口号:正在计算机上运行的进程。要求:不同的进程有不同的端口号范围:被规定为一个 16 位的整数 0~65535。8. 端口号与IP地址的组合得出一个网络套接字:Socket

二、网络通信协议

传输层的TCP协议和UDP协议的主要区别TCP:可靠的数据传输(三次握手);进行大数据量的传输;效率低UDP:不可靠;以数据报形式发送,数据报限定为64k;效率高

三、TCP网络编程

例子1:客户端发送信息给服务端,服务端将数据显示在控制台上

@Test

    //客户端@Testpublic void client(){Socket socket = null;OutputStream os = null;try {//1.创建Socket对象,指明服务器端的ip和端口号InetAddress inet = InetAddress.getByName("192.168.1.107");socket = new Socket(inet,8899);//2.获取一个输出流,用于输出数据os = socket.getOutputStream();//3.写出数据的操作os.write("你好,我是客户端mm".getBytes());} catch (IOException e) {e.printStackTrace();} finally {//4.资源的关闭if(os != null){try {os.close();} catch (IOException e) {e.printStackTrace();}}if(socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}//服务端@Testpublic void server(){ServerSocket ss = null;Socket socket = null;InputStream is = null;ByteArrayOutputStream baos = null;try {//1.创建服务器端的ServerSocket,指明自己的端口号ss = new ServerSocket(8899);//2.调用accept()表示接收来自于客户端的socketsocket = ss.accept();//3.获取输入流is = socket.getInputStream();//4.读取输入流中的数据baos = new ByteArrayOutputStream();byte[] buffer = new byte[5];int len;while((len = is.read(buffer)) != -1){baos.write(buffer,0,len);}System.out.println(baos.toString()); //你好,我是客户端mmSystem.out.println("收到了来自于:" + socket.getInetAddress().getHostAddress() + "的数据"); //收到了来自于:192.168.1.107的数据} catch (IOException e) {e.printStackTrace();} finally {//5.关闭资源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(ss != null){try {ss.close();} catch (IOException e) {e.printStackTrace();}}}}

例题2:从客户端发送文件给服务端,服务端保存到本地。并返回“发送成功”给客户端。

@Test

    //客户端@Testpublic void client(){Socket socket = null;OutputStream os = null;FileInputStream fis = null;try {socket = new Socket(InetAddress.getByName("192.168.1.107"),9090);os = socket.getOutputStream();fis = new FileInputStream(new File("beauty.jpg"));byte[] buffer = new byte[1024];int len;while((len = fis.read(buffer)) != -1){os.write(buffer,0,len);}//关闭数据的输出socket.shutdownOutput();//接收来自于服务器端的数据,并显示到控制台上InputStream is = socket.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer1 = new byte[20];int len1;while((len1 = is.read(buffer1)) != -1){baos.write(buffer1,0,len1);}System.out.println(baos.toString());} catch (IOException e) {e.printStackTrace();} finally {}if(fis != null){try {fis.close();} catch (IOException e) {e.printStackTrace();}}if(os != null){try {os.close();} catch (IOException e) {e.printStackTrace();}}if(socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if(baos != null){try {baos.close();} catch (IOException e){e.printStactTrace();}}}//服务端@Testpublic void server(){ServerSocket ss = null;Socket socket = null;InputStream is = null;FileOutputStream fos = null;try {ss = new ServerSocket(9090);socket = ss.accept();is = socket.getInputStream();fos = new FileOutputStream(new File("beauty1.jpg"));byte[] buffer = new byte[1024];int len;while((len = is.read(buffer)) != -1){fos.write(buffer,0,len);}System.out.println("图片传输完成");//服务器端给予客户端反馈OutputStream os = socket.getOutputStream();os.write("你好,美女,照片我已收到,非常漂亮!".getBytes());} catch (IOException e) {e.printStackTrace();} finally {}if(os != null){try {os.close();} catch (IOException e) {e.printStackTrace();}}if(fos != null){try {fos.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(ss != null){try {ss.close();} catch (IOException e) {e.printStackTrace();}}}

四、UDP网络编程

@Test

    //发送端@Testpublic void sender(){DatagramSocket socket = null;try {socket = new DatagramSocket();String str = "我是UDP方式发送的导弹";byte[] data = str.getBytes();InetAddress inet = InetAddress.getByName("192.168.1.107");DatagramPacket packet = new DatagramPacket(data,0,data.length,inet,9090);socket.send(packet);} catch (IOException e) {e.printStackTrace();} finally {socket.close();}}//接收端@Testpublic void receiver(){DatagramSocket socket = null;try {socket = new DatagramSocket(9090);byte[] buffer = new byte[100];DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);socket.receive(packet);System.out.println(new String(packet.getData(),0,packet.getLength()));} catch (IOException e) {e.printStackTrace();} finally {socket.close();}}

五、URL编程

1.URL:统一资源定位符,对应着互联网的某一资源地址
2.格式:http://localhost:8080/examples/beauty.jpg?username=Tom协议   主机名    端口号  资源地址           参数列表

@Test

    @Testpublic void URLTest(){try {URL url = new URL("http://localhost:8080/examples/beauty.jpg?username=Tom");//public String getProtocol()获取该URL的协议名System.out.println(url.getProtocol()); //http//public String getHost()获取该URL的主机名System.out.println(url.getHost()); //localhost//public String getPort()获取该URL的端口号System.out.println(url.getPort()); //8080//public String getPath()获取该URL的文件路径System.out.println(url.getPath()); ///examples/beauty.jpg//public String getFile()获取该URL的文件名System.out.println(url.getFile()); ///examples/beauty.jpg?username=Tom//public String getQuery()获取该URL的查询名System.out.println(url.getQuery()); //username=Tom} catch (MalformedURLException e) {e.printStackTrace();}}@Testpublic void URLTest1(){HttpURLConnection urlConnection = null;InputStream is = null;FileOutputStream fos = null;try {URL url = new URL("http://localhost:8080/examples/beauty.jpg");urlConnection = (HttpURLConnection) url.openConnection();urlConnection.connect();is = urlConnection.getInputStream();fos = new FileOutputStream("day10\\beauty3.jpg");byte[] buffer = new byte[1024];int len;while((len = is.read(buffer)) != -1){fos.write(buffer,0,len);}System.out.println("下载完成");} catch (IOException e) {e.printStackTrace();} finally {//关闭资源if(is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}if(fos != null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}if(urlConnection != null){urlConnection.disconnect();}}}

Java基础 - 第九章 - 网络编程相关推荐

  1. 重拾Java基础知识:网络编程

    网络编程 前言 网络体系结构 IP地址 IP地址分类 子网掩码 端口 域名 网络协议 TCP/IP协议 三次握手与四次挥手 为什么要三次握手? 为什么要四次挥手? UDP协议 HTTP协议 Socke ...

  2. Java基础部分笔记----------网络编程

    2019独角兽企业重金招聘Python工程师标准>>> 1.Java网络基本支持 1.1 InetAddress Java中的InetAddress是一个代表IP地址的对象.IP地址 ...

  3. Java基础篇:网络编程

    文章目录 概述 通信要素之一:IP和端口号 通信要素之二:网络协议 TCP网络编程 UDP网络编程 URL编程 总结 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支 ...

  4. Java基础:18. 网络编程

    目录 1 网络编程的常识​​​​​​ 1.1 七层网络模型 1.2 相关的协议 1.3 IP地址 1.4 端口号 2 基于tcp协议的编程模型 2.1 C/S架构的简介 2.2 编程模型 2.3 相关 ...

  5. 【Java基础总结】网络编程

    网络编程 InetAddress tcp udp 转载于:https://www.cnblogs.com/lhat/p/6168909.html

  6. JAVA基础知识之网络编程——-基于AIO的异步Socket通信

    异步IO 下面摘子李刚的<疯狂JAVA讲义> 按照POSIX标准来划分IO,分为同步IO和异步IO.对于IO操作分为两步,1)程序发出IO请求. 2)完成实际的IO操作. 阻塞IO和非阻塞 ...

  7. Java基础知识回顾--网络编程基础

    OSI参考模型 TCP/IP参考模型应用层 表示层 应用层会话层传输层 传输层网络层 网络层 数据链路层 物理+数据链路层物理层 IP协议 最大的贡献就是给大家提供了独一无二的IP地址. A类地址 8 ...

  8. java基础 第九章(设计模式 单例模式)

    设计模式(23种) 设计模式就是一种思想 java .c++-- 就比如是盖房子,起初只是为了住人,后来房子装饰,装饰就是一种设计模式,分为欧式,中式呀,这就是设计模式. 一.第一种单例模式(饿汉式) ...

  9. Java基础学习——第十四章 网络编程

    Java基础学习--第十四章 网络编程 一.网络编程概述 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信 ...

最新文章

  1. mysql 最小日期函数_MySQL 日期加减函数汇总
  2. oralce 异常处理 exception
  3. Ubuntu 命令行打开pdf文件和打开命令行当前目录
  4. Matlab | Matlab从入门到放弃(4)——样本均值
  5. mysql免安装版大小,mysql安装(免安装版,压缩版)
  6. eslint php,ESlint操作步骤详解
  7. MySQL流浪记(三)—— Linux安装MySQL数据库5.7.30(亲测有效3分钟即可)
  8. js获取下月时间_js 获取 本周、下周、本月、下月、本季度、下季度的开始结束日期...
  9. mysql有热备设置_Mysql数据热备配置与操作方法
  10. Allegro 导入ASC file的步骤
  11. [Java] 蓝桥杯ALGO-125 算法训练 王、后传说
  12. Linux下安装Mysql详解
  13. Redis持久化的方式
  14. 如何处理地下管线数据
  15. Anaconda更换字体及字号
  16. GitHub注册过程(图文详细讲解)
  17. uhs3内存卡有哪些_什么是UHS超高速SD卡?三代有什么区别
  18. 红帽子linux装mysql_linux安装mysql
  19. This gonna be my first Tech Blog
  20. 利用Python将csv文件按照某列分成小csv

热门文章

  1. web前端面试问题及答案
  2. html情侣相册,情侣相册教程-会声会影中文官网
  3. Java面向对象编程(一)
  4. 计算机如何算同比下降计算公式,公务员考试练习:资料分析(453)
  5. 员工福利平台:让员工福利更加“鲸彩FUN粽”
  6. SpringCloud 应用在 Kubernetes 上的最佳实践 —— 高可用(弹性伸缩)
  7. spring boot 请求 rest 服务
  8. 解决---设备“VMnet0”上的网桥没有运行。该虚拟机无法与此主机或网络上的其他主机进行通信。 无法连接虚拟设备“Ethernet0”。
  9. 【ctf-2】密码学-文件操作-Web前端
  10. matlab建模三要素,MATLAB建模与求解详解.ppt