网络编程(笔记)

来源:拉勾教育Java就业集训营

网络编程的常识

目前主流的网络通讯软件有:微信、QQ、飞信、阿里旺旺、陌陌、探探、...

七层网络模型
  • OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985 年研究的网络互连模型。

  • OSI七层模型和TCP/IP五层模型的划分如下:

01 网络模型.png
  • 当发送数据时,需要对发送的内容按照上述七层模型进行层层加包后发送出去。

  • 当接收数据时,需要对接收的内容按照上述七层模型相反的次序层层拆包并显示出来。

相关的协议(笔试题)
协议的概念

计算机在网络中实现通信就必须有一些约定或者规则,这种约定和规则就叫做通信协议,通信协议 可以对速率、传输代码、代码结构、传输控制步骤、出错控制等制定统一的标准。

TCP协议

传输控制协议(Transmission Control Protocol),是一种面向连接的协议,类似于打电话。

  • 建立连接 => 进行通信 => 断开连接

  • 在传输前采用"三次握手"方式。

  • 在通信的整个过程中全程保持连接,形成数据传输通道。

  • 保证了数据传输的可靠性和有序性。

  • 是一种全双工的字节流通信方式,可以进行大数据量的传输。

  • 传输完毕后需要释放已建立的连接,发送数据的效率比较低。

02 TCP三次握手.png
03 TCP四次挥手.png
UDP协议

用户数据报协议(User Datagram Protocol),是一种非面向连接的协议,类似于写信。

  • 在通信的整个过程中不需要保持连接,其实是不需要建立连接。
  • 不保证数据传输的可靠性和有序性。
  • 是一种全双工的数据报通信方式,每个数据报的大小限制在64K内。
  • 发送数据完毕后无需释放资源,开销小,发送数据的效率比较高,速度快。
IP地址(重点)
  • 192.168.1.1 - 是绝大多数路由器的登录地址,主要配置用户名和密码以及Mac过滤。
  • IP地址是互联网中的唯一地址标识,本质上是由32位二进制组成的整数,叫做IPv4,当然也有128 位二进制组成的整数,叫做IPv6,目前主流的还是IPv4。
  • 日常生活中采用点分十进制表示法来进行IP地址的描述,将每个字节的二进制转化为一个十进制整 数,不同的整数之间采用小数点隔开。
  • 如: 0x01020304 => 1.2.3.4
  • 查看IP地址的方式: Windows系统:在dos窗口中使用ipconfig或ipconfig/all命令即可 Unix/linux系统:在终端窗口中使用ifconfig或/sbin/ifconfig命令即可
  • 特殊的地址 本地回环地址(hostAddress):127.0.0.1 主机名(hostName):localhost
端口号(重点)
  • IP地址 - 可以定位到具体某一台设备。
  • 端口号 - 可以定位到该设备中具体某一个进程。
  • 端口号本质上是16位二进制组成的整数,表示范围是:0 ~ 65535,其中0 ~ 1024之间的端口号通 常被系统占用,建议编程从1025开始使用。
  • 特殊的端口: HTTP:80 FTP:21 Oracle:1521 MySQL:3306 Tomcat:8080
  • 网络编程需要提供:IP地址 + 端口号,组合在一起叫做网络套接字:Socket。

基于tcp协议的编程模型(重点)

C/S架构的简介
  • 在C/S模式下客户向服务器发出服务请求,服务器接收请求后提供服务。
  • 例如:在一个酒店中,顾客找服务员点菜,服务员把点菜单通知厨师,厨师按点菜单做好菜后让服 务员端给客户,这就是一种C/S工作方式。如果把酒店看作一个系统,服务员就是客户端,厨师就 是服务器。这种系统分工和协同工作的方式就是C/S的工作方式。
  • 客户端部分:为每个用户所专有的,负责执行前台功能。
  • 服务器部分:由多个用户共享的信息与功能,招待后台服务。
04 基于tcp协议的编程模型.png
编程模型
  • 服务器:
    1. 创建ServerSocket类型的对象并提供端口号;
    2. 等待客户端的连接请求,调用accept()方法;
    3. 使用输入输出流进行通信;
    4. 关闭Socket;
  • 客户端:
    1. 创建Socket类型的对象并提供服务器的IP地址和端口号;
    2. 使用输入输出流进行通信;
    3. 关闭Socket;
相关类和方法的解析
ServerSocket类
  • java.net.ServerSocket类主要用于描述服务器套接字信息(大插排)。

  • 常用的方法如下:

    方法声明 功能介绍
    ServerSocket(int port) 根据参数指定的端口号来构造对象
    Socket accept() 侦听并接收到此套接字的连接请求
    void close() 用于关闭套接字
Socket类
  • java.net.Socket类主要用于描述客户端套接字,是两台机器间通信的端点(小插排)。

  • 常用的方法如下:

    方法声明 功能介绍
    Socket(String host, int port) 根据指定主机名和端口来构造对象
    InputStream getInputStream() 用于获取当前套接字的输入流
    OutputStream getOutputStream() 用于获取当前套接字的输出流
    void close() 用于关闭套接字
注意事项
  • 客户端 Socket 与服务器端 Socket 对应, 都包含输入和输出流。
  • 客户端的socket.getInputStream() 连接于服务器socket.getOutputStream()。
  • 客户端的socket.getOutputStream()连接于服务器socket.getInputStream()

基于udp协议的编程模型(熟悉)

编程模型
  • 接收方:
    1. 创建DatagramSocket类型的对象并提供端口号;
    2. 创建DatagramPacket类型的对象并提供缓冲区;
    3. 通过Socket接收数据内容存放到Packet中,调用receive方法;
    4. 关闭Socket;
  • 发送方:
    1. 创建DatagramSocket类型的对象;
    2. 创建DatagramPacket类型的对象并提供接收方的通信地址;
    3. 通过Socket将Packet中的数据内容发送出去,调用send方法;
    4. 关闭Socket;
相关类和方法的解析
DatagramSocket类
  • java.net.DatagramSocket类主要用于描述发送和接收数据报的套接字(邮局)。 换句话说,该类就是包裹投递服务的发送或接收点。

  • 常用的方法如下:

    方法声明 功能介绍
    DatagramSocket() 使用无参的方式构造对象
    DatagramSocket(int port) 根据参数指定的端口号来构造对象
    void receive(DatagramPacket p) 用于接收数据报存放到参数指定的位置
    void send(DatagramPacket p) 用于将参数指定的数据报发送出去
    void close() 关闭Socket并释放相关资源
DatagramPacket类
  • java.net.DatagramPacket类主要用于描述数据报,数据报用来实现无连接包裹投递服务。

  • 常用的方法如下:

    方法声明 功能介绍
    DatagramPacket(byte[] buf, int length) 根据参数指定的数组来构造对象,用于接 收长度为length的数据报
    DatagramPacket(byte[] buf, int length, InetAddress address, int port) 根据参数指定数组来构造对象,将数据报 发送到指定地址和端口
    InetAddress getAddress() 用于获取发送方或接收方的通信地址
    int getPort() 用于获取发送方或接收方的端口号
    int getLength() 用于获取发送数据或接收数据的长度
InetAddress类
  • java.net.InetAddress类主要用于描述互联网通信地址信息。

  • 常用的方法如下:

    方法声明 功能介绍
    static InetAddress getLocalHost() 用于获取当前主机的通信地址
    static InetAddress getByName(String host) 根据参数指定的主机名获取通信地址

URL类(熟悉)

基本概念
  • java.net.URL(Uniform Resource Identifier)类主要用于表示统一的资源定位器,也就是指向万 维网上“资源”的指针。这个资源可以是简单的文件或目录,也可以是对复杂对象的引用,例如对数 据库或搜索引擎的查询等。
  • 通过URL可以访问万维网上的网络资源,最常见的就是www和ftp站点,浏览器通过解析给定的 URL可以在网络上查找相应的资源。
  • URL的基本结构如下: <传输协议>://<主机名>:<端口号>/<资源地址>
常用的方法
方法声明 功能介绍
URL(String spec) 根据参数指定的字符串信息构造对象
String getProtocol() 获取协议名称
String getHost() 获取主机名称
int getPort() 获取端口号
String getPath() 获取路径信息
String getFile() 获取文件名
URLConnection openConnection() 获取URLConnection类的实例
URLConnection类
基本概念

java.net.URLConnection类是个抽象类,该类表示应用程序和URL之间的通信链接的所有类的超类,主要实现类有支持HTTP特有功能的HttpURLConnection类。

HttpURLConnection类的常用方法
方法声明 功能介绍
InputStream getInputStream() 获取输入流
void disconnect() 断开连接
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,551评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,187评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,172评论 2 7