Day 20:网络编程(1)
什么是计算机网络?
指的是分布在不同地域的计算机,通过外部设备连接起来,实现资源共享与数据传输的计算机系统。
通信三要素:
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)的更多相关文章
- python学习(20) 网络编程
原文链接:http://www.limerence2017.com/2018/01/02/python20/ python 网络编程和基本的C语言编程一样,效率不是很高,如果为了封装通信库建议采用C/ ...
- python网络编程-socket编程
一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...
- python网络编程
Socket是网络编程的一个抽象的概念. 通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套 ...
- Python之路【第七篇】python基础 之socket网络编程
本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket 网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...
- python 网络编程
一.网络知识的一些介绍 socket是网络连接端点.例如当你的Web浏览器请求www.pythontik.com上的主页时,你的Web浏览器创建一个socket并命令它去连接www.pythontik ...
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...
- socket网络编程
一.客户端/服务器架构 C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(Web服务) 最常用的软件服务器就是Web服务器,一台机器里放了一些网页或Web应用程序,然后启动服务,这样 ...
- python成长之路【第九篇】:网络编程
一.套接字 1.1.套接字套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信.这就是所谓的进程间通信(Inter Process Commun ...
- android基础(五)网络编程
android 的网络编程一般可以分为两种:基于Socket的,基于Http的. 一.socket与Http socket封装了TCP/IP协议,TPC/IP协议是传输层协议,主要解决数据如何在网络中 ...
随机推荐
- ubuntu用命令行打开vscode
1.打开终端 2.输入code即可
- 01背包问题_回溯法&分支限界法
package 分支限界法; import java.util.LinkedList; import java.util.Scanner; /*01背包问题*/ public class ZOPack ...
- 检测皮肤PH值、感知你的便意,健康是可穿戴设备的新风口?
在经历最初的喧嚣与疯狂后,可穿戴设备近年来有些低调和沉寂.换句话说,虽然可穿戴设备销量在持续走高,但从形态和功能上,呈现出高度一致性.这似乎也在证明着,可穿戴设备已成为寻常可见的普通产品而已.不过在迈 ...
- 学习笔记:中国剩余定理(CRT)
引入 常想起在空间里见过的一些智力题,这个题你见过吗: 一堆苹果,\(3\)个\(3\)个地取剩\(1\)个,\(5\)个\(5\)个地取剩\(1\)个,\(7\)个\(7\)个地取剩\(2\)个,苹 ...
- 腾讯2019秋招--小q爬塔(dp)
小Q爬塔 题目描述: 小Q 正在攀登一座宝塔,这些宝塔很特别.塔总共有 n 层,但是每两层之间的净高却不相同,所以造成了小Q 爬过每层的时间也不同.如果某一层的高度为 x,那么爬过这一层所需的时间也是 ...
- java小项目之:抽奖系统!java初学者必备(内附源码)
[Java]Java摇奖源码,Java抽奖源码,Java随机抽奖源码 任务描述 本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录成功后,就可以参加抽奖活动了.注册 用 ...
- 洛谷 P1094 纪念品分类
刚开始看到这题就确定这题最好先要排序 第一个想法是排好序后先让第一个和从倒数第一个开始相加和如果就 <= w,那么用n除以2或者再加一得出答案,然后发现随便 当w = 110 n = 5序列 ...
- 095、Java中String类之不自动保存对象池操作
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- Python 绘图
python绘图库有很多,底层的就是matplotlib,另外还有基于matplotlib的更方便,代码可读性更强的库,比如seaborn.plotnine等.各个库之间的对比: https://ww ...
- Readiness 探测【转】
除了 Liveness 探测,Kubernetes Health Check 机制还包括 Readiness 探测. 用户通过 Liveness 探测可以告诉 Kubernetes 什么时候通过重启容 ...