什么是计算机网络?

  指的是分布在不同地域的计算机,通过外部设备连接起来,实现资源共享与数据传输的计算机系统。

通信三要素:

IP:

IP地址

  Internet上的每台主机(Host)都有一个唯一的IP地址。IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。例如    159.226.1.1。(四个字节)
IP地址类别
IP地址是由网络号和主机号组成
  A类地址:8位网络位,24位主机位
  B类地址: 16位网络位,16位主机位
  C类地址: 24位网络位,8位主机位
  特殊的IP地址:127.0.0.1 表示 本机回环地址

端口:

Port地址
  如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。
Port分类(0~65535)
  公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。
  注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。
  动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。
  常用端口
    21    FTP       
    80    HTTP
    443  HTTPS

协议:

TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议。
  特点:
    面向连接的协议,数据传输必须要建立连接,所以在TCP中需要连接时间。
    传输数据大小限制,一旦连接建立,双方可以按统一的格式传输大的数据。
    一个可靠的协议,确保接收方完全正确地获取发送方所发送的全部数据。
UDP: User Datagram Protocol的简称, 中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
  特点:
    每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。
    UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。
    UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

Java网络编程
  Java网络编程其实就是实现局域网或互联网之间的数据通信(数据传输)。
Java网络编程要素
  通过前面的知识,大家知道了计算机之间的数据传输需要三个要素。(IP(主机名)、端口、协议),Java是OOP语言,所以将其封装为特定的对象,java.net.*
  对象映射
    IP       主机名   (InetAddress)
    端口   数字标识   不用封装为对象

InetAddress
  此类表示互联网协议 (IP) 地址。
功能
  getLocalHost()
  getHostAddress()
  getHostName()
  getByName(String host)
  getAllByName(String host)
细节
  使用getByName(String host)通过一个IP地址找主机时,如果IP和Address没有对应在公网上,那么该IP解析不了对应的地址,而且显示为对应IP且查询很慢。
  可以getByName(String host)找出域名对应的IP,getAllByName()可以获取多个地址。

import java.net.InetAddress;
import java.net.UnknownHostException;public class Demo1 {public static void main(String[] args) throws UnknownHostException {InetAddress address  = InetAddress.getLocalHost();System.out.println(address.getHostAddress());//返回的是字符串
        System.out.println(address.getHostName());InetAddress address1 = InetAddress.getByName("www.baidu.com");System.out.println(address1);System.out.println(address1.getHostAddress());//返回的是字符串
        }
}/*InetAddress[] address1 = InetAddress.getAllByName("www.baidu.com");  for(InetAddress a:address1) {   System.out.println(a);  }*///百度公司注册了两台服务器

在JAVA中网络通信也叫做Socket(插座)通讯,要求互相通讯的两台机器必须安装Socket。不同的协议有不同的Socket

  UDP
    将数据极其源和目的封装为数据包,不需要建立连接。
    每个数据包大小限制在64K中
    因为无连接,所以不可靠
    因为不需要建立连接,所以速度快

  UDP下的Socket:

    DatagramSocket(UDP插座服务)

    DatagramPacket(数据包类)

TCP
  面向连接,有特有的通道
  在连接中传输大数据量
  通过三次握手机制连接,可靠协议
  通信前必须建立连接,效率稍低

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;public class Demo2 {public static void main(String[] args) throws IOException {//建立udp的服务DatagramSocket ds = new DatagramSocket();//准备数据,把数据封装到数据包中。String data = "fdsfgdsgdsgfdsfg";//创建了一个数据包DatagramPacket dp = new DatagramPacket(data.getBytes(),data.getBytes().length ,InetAddress.getLocalHost() , 9090);//调用udp的服务发送数据包
        ds.send(dp);//关闭资源 ---实际上就是释放占用的端口号
        ds.close();}
}

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class Demo3 {private void main(String args[]) throws IOException {// TODO Auto-generated method stub//建立udp的服务, ,并且要监听一个端口。DatagramSocket ds = new DatagramSocket(9090);//准备空的数据包用于存放数据。byte[] buf = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length); //receive是一个阻塞型的方法,没有接收到数据包之前会一直等待。 数据实际上就是存储到了byte的自己数组中了。
        ds.receive(datagramPacket);        System.out.println(new String(buf,0,datagramPacket.getLength()));//关闭资源
        ds.close();}}

先在eclipse运行接收端,然后在命令提示符中运行发送端,否则数据丢失。

转载于:https://www.cnblogs.com/JYDesigner/p/9425106.html

Day 20:网络编程(1)相关推荐

  1. Java 知识点整理-20.网络编程

    目录 补充的一些快捷键 网络编程概述 网络编程三要素之IP概述 网络编程三要素之端口号概述 网络编程三要素之协议概述 Socket通信原理图解 UDP传输 UDP传输优化 UDP传输多线程 UDP聊天 ...

  2. C# 学习笔记 20.网络编程

    1.基础知识 OSI(open system interconnection)模型把网络通信分成7层:物理层,数据链路层,网络层,传输层,会话层,表示层,和应用层. 网络开发人员一般分成5层   应用 ...

  3. AI:一个20年程序猿的学习资料大全—BAT等面试资料/NECCS大赛资料/一二级建造师/网络编程爬虫等/公务员——只有你不想要的,没有你找不到的

    AI:一个20年程序猿的学习资料大全--前端/后端/架构师/运维各种很多教程资料--只有你不想要的,没有你找不到的 AI:一个20年程序猿的学习资料大全-结构分析软件/办公软件/电气制造控制/高级语言 ...

  4. 《TCP/IP网络编程》第20章

    <TCP/IP网络编程>第20章 同步方法分类及CRITICAL_SECTION同步 用户模式(User mode)和内核模式(Kernal mode) 用户模式同步 内核模式同步 基于C ...

  5. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll、Epoll模型处理长连接性能比较

    在<朴素.Select.Poll和Epoll网络编程模型实现和分析--模型比较>一文中,我们分析了各种模型在处理短连接时的能力.本文我们将讨论处理长连接时各个模型的性能.(转载请指明出于b ...

  6. Windows/Linux TCP Socket网络编程简介及测试代码

    典型的网络应用是由一对程序(即客户程序和服务器程序)组成的,它们位于两个不同的端系统中.当运行这两个程序时,创建了一个客户进程和一个服务器进程,同时它们通过从套接字(socket)读出和写入数据在彼此 ...

  7. Linux C++/Java/Web/OC Socket网络编程

    一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...

  8. Objective-c 网络编程1 Web请求和响应

    2019独角兽企业重金招聘Python工程师标准>>> // // ViewController.m // 网络编程 // // Created by DC017 on 15/12/ ...

  9. Java - 网络编程(NetWork)

    Java - 网络编程(NetWork) 一.java.net包下的 InetAddress 类的使用: > 一个 InetAddress 代表着一个IP地址 > 主要用来查看本机的IP和 ...

最新文章

  1. linux驱动:i2c驱动(二)
  2. 《编程导论(Java)#183;1.4.1 范式》
  3. 【python】简单实现一个模板引擎
  4. 前端学习(2704):重读vue电商网站25之保存token
  5. 链接选项 rpath 的原理和应用
  6. oracle 完整约束,【oracle】完整性約束
  7. sql [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause
  8. 服务器磁盘会影响应用么,想了解服务器磁盘的IO吞吐量,用sqlio 工具会不会对当前服务器有影响...
  9. sublime text配置VBA编辑器插件
  10. 分享一款好用的英语词频统计软件
  11. cordova 指纹验证登录
  12. ictclas4j java_使用ICTCLAS JAVA版(ictclas4j)进行中文分词
  13. 什么是敏捷开发Scrum
  14. 定制材料 GPTMS修饰的纳米二氧化硅(GPTMS-SiO2)/C18键合纳米金修饰二氧化硅颗粒/二氧化硅修饰咪唑型离子液体
  15. LOGO的国际标准规范
  16. IOS cocoapods镜像源更新
  17. 国内外云服务器厂商分类(性价比分析)
  18. python对象的基本概念
  19. 下载adb,安装adb,使用adb
  20. 3D建模:极限精度挑战-仿真女神赵丽颖

热门文章

  1. 自己定义字体之BMFont的使用
  2. line-height:2和line-height:2em的区别,它们是有区别的
  3. GL中的累计组、汇总帐户和帐户查询的关系
  4. 解决北京户口,中科院计算所校招,CV/图像处理工程师,博士优先
  5. CVPR 2020|华为发布基于连续进化的CARS算法,0.4GPU天输出帕累托前沿
  6. 【项目合作】移动端人体姿态估计
  7. 阿里巴巴提出Auto-Context R-CNN算法,刷出Faster RCNN目标检测新高度
  8. redis常见面试题有哪些?redis集群面试题及答案整理
  9. Github | 深度神经网络(DNN)与生成式对抗网络(GAN)模型总览
  10. 好书荐读:阿里达摩院算法专家领衔《深度学习与图像识别:原理与实践》