什么是计算机网络?

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

通信三要素:

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. ES 查询时 排序报错(fielddata is disabled on text fileds by default ... )解决方法

    背景:elasticsearch 进行排序的时候,可能会排序数字.日期.但是在排序text类型的时候就会出现上述错误 原因(参考): https://blog.csdn.net/wild46cat/a ...

  2. routes 学习

    对于routes的学习,感觉还是看官方文档理解的比较快,主要说明connect和resource Setting up routes¶ It is assumed that you are using ...

  3. map的查询和修改方法

    1:map查询的方法 package com.cn.util; import java.util.ArrayList; import java.util.HashMap; import java.ut ...

  4. js原型链。。fuck

    function Person(name){ this.name = name; }; function Mother(){ }; //给mother提供公有的属性 Mother.prototype ...

  5. java、mysql、oracle、pgsql数据类型对应关系

    看不清 请 Ctrl+鼠标滚轮     放大页面

  6. redis、mongodb、memcache安装好后设置开机自启动

    vim /etc/rc.d/rc.local /usr/local/mongodb/bin/mongod --smallfiles /usr/local/bin/redis-server/usr/lo ...

  7. 虚拟机字节码指令表 JVM

    虚拟机字节码指令表 标签(空格分隔): Java基础 JVM 记录虚拟机字节码指令,方便分析.以下内容来自<深入理解Java虚拟机> 字节码 助记符 指令含义 0x00 nop 什么都不做 ...

  8. 吴裕雄--天生自然JAVAIO操作学习笔记:IO操作实例、Scanner、数据操作流与合并流

    import java.io.* ; public class ExecDemo01{ public static void main(String args[]) throws Exception{ ...

  9. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:按钮标签

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. JuJu团队1月8号工作汇报

    JuJu团队1月8号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 飞飞 实现三维Dense 将crossentrophy和softmax连接起来 无 婷婷 完善main.jl ...