什么是计算机网络?

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

通信三要素:

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运行接收端,然后在命令提示符中运行发送端,否则数据丢失。

Day 20:网络编程(1)的更多相关文章

  1. python学习(20) 网络编程

    原文链接:http://www.limerence2017.com/2018/01/02/python20/ python 网络编程和基本的C语言编程一样,效率不是很高,如果为了封装通信库建议采用C/ ...

  2. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  3. python网络编程

    Socket是网络编程的一个抽象的概念. 通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套 ...

  4. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  5. python 网络编程

    一.网络知识的一些介绍 socket是网络连接端点.例如当你的Web浏览器请求www.pythontik.com上的主页时,你的Web浏览器创建一个socket并命令它去连接www.pythontik ...

  6. 20145205 《Java程序设计》实验报告五:Java网络编程及安全

    20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...

  7. socket网络编程

    一.客户端/服务器架构 C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(Web服务) 最常用的软件服务器就是Web服务器,一台机器里放了一些网页或Web应用程序,然后启动服务,这样 ...

  8. python成长之路【第九篇】:网络编程

    一.套接字 1.1.套接字套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信.这就是所谓的进程间通信(Inter Process Commun ...

  9. android基础(五)网络编程

    android 的网络编程一般可以分为两种:基于Socket的,基于Http的. 一.socket与Http socket封装了TCP/IP协议,TPC/IP协议是传输层协议,主要解决数据如何在网络中 ...

随机推荐

  1. Linux-使用之vim编译安装出现的问题

    ---恢复内容开始--- cd <directory> Short for "change directory". The shorthand name for the ...

  2. Spark教程——(3)编写spark-shell测试Demo

    创建一个文件aa.txt,随便写点内容: hello world! aa aa d d dg g 登录HDFS文件系统: [root@node1 ~]# su hdfs 在HDFS文件系统中创建文件目 ...

  3. 十六、myeclipse导入别人项目报错java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServle异常

    问题原因:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServle异常    我是把别人的源码项目直接导 ...

  4. IdentityServer4专题之四:Authorization Endpoint、Token Endpoint、scope、Access Token和Refresh Token、授权服务器发生错误

    1.Authorization Endpoint 它是与用户交互的端点,用户在此进行为客户端应用授权的操作,即authorization grant 2.Token Endpoint 端点,就是一个w ...

  5. 【转】WdatePicker日历控件使用方法

    转                自:   https://www.cnblogs.com/yuhanzhong/archive/2011/08/10/2133276.html WdatePicke官 ...

  6. LR的深入理解资料汇集

    今天面试被问到LR的算法的梯度和正则化项,自己不太理解,所以找了一些相关资料,发现LR的算法在梯度下降,正则化和sigmoid函数方面都有很深的研究,期间也发现一些比较好的资料,记录一下. 这篇论文推 ...

  7. 蓝牙 BLE 协议学习: 3种蓝牙架构实现方案(蓝牙协议栈方案)

    导言 不同的蓝牙架构可以用在不同的场景中.从而协议帧的架构方案也会不同. 转载自:<三种蓝牙架构实现方案(蓝牙协议栈方案)> 蓝牙架构实现方案有哪几种?我们一般把整个蓝牙实现方案叫做蓝牙协 ...

  8. arm linux 移植 udhcp 与 使用

    背景 在一些网络环境下,需要静态IP不够现实,需要使用DHCP进行自动获取IP地址. udhcpc是一个面向嵌入式系统的非常小的DHCP客户端,字母的缩写微μ- DHCP -客户端client(μDH ...

  9. elasticsearch kibana logstash(ELK)的安装集成应用

    官网关于kibana的学习指导网址是:https://www.elastic.co/guide/en/kibana/current/index.html Kibana是一个开源的分析和可视化平台,设计 ...

  10. Stm32CubeMx lwip+freeRTOS TCP 服务

    如何添加lwip参照上一篇   stm32CubeMx lwip + freeRTOS 今天讲一下,如何添加TCP服务 LwIP 提供了三种编程接口,分别为 RAW/Callback API.NETC ...