1、 网络编程概述

1.1  网络编程三要素

地址、端口、协议

1.1.1 IP地址:网络中设备的唯一标识。

IPV4格式:xxx.xxx.xxx.xxx由四段数字组成,每一段数字由八位二进制数字组成,取值范围是0到255。

IPV6格式:使用16个字节表示一个ip地址

1.1.2 端口号:就是一个十进制的整数,取值范围0到65535

作用:每一个进程都会有一个端口号,用来唯一标识每一个进程。

注意:不要使用0到1024以下的端口号,因为1024以下的端口号是由系统保留使用的, 要使用1024以上的。

1.1.3协议:计算机与计算机之间通信的数据格式

小结:通过ip找主机,通过端口号找进程,通过协议确定如何传输数据。

1.2  InetAddress类

一个该类的对象就代表互联网的一个IP地址。

public static InetAddress getLocalHost​()

获取本地主机IP地址

        public static InetAddress getByName​(String host)

根据主机名或IP字符串,创建IP地址对象

public String getHostName​()

获取此IP地址的主机名。

public String getHostAddress​()

返回文本显示中的IP地址字符串。

2. UDP通信

       UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。

2.1 UDP : User Datagram Protocloè.用户数据包协议

UDP协议的特点:

(a)   面向无连接的协议

(b)   只管发送,不确定对方是否收到

(c)    给予数据包发送:将数据以及来源,接收端IP地址和端口号信息封装到数据包发送

(d)   发送数据大小限制在64k以内

(e)   因为面向无连接,所以速度快,但是不可靠

UDP协议的使用场景

(a)   即时通信(QQ,微信,陌陌,飞秋)

(b)   在线视频

(c)    在线语音电话

2.2 UDP协议相关的两个类

DatagramPacket          数据包对象,用来封装要发送或要接收的数据,比喻为集装箱

DatagramSocket          发送对象,用来发送或接受数据包,比喻为码头

2.2.1 DatagramPacket

public DatagramPacket(byte[] buf, int length,  InetAddress address,  int port)

创建发送端数据包对象

buf - 分组数据。

length - 包长度,单位:字节

address - 目的地址。

port - 目的端口号。

public DatagramPacket​(byte[] buf, int length)

创建接受端数据包对象

2.2.2 DatagramSocket

数据发送对象。此类表示用于发送和接收数据报数据包的套接字

DatagramSocket成员方法:

        void send(DatagramPacket p)    发送数据报包
        void received(DatagramPacet p) 接受数据包
        void close()                   关闭资源,释放端口号
 
 
 
3. TCP通信
    TCP协议是面向连接的通信协议,即在数据传输之前现在客户端和服务器端建立逻辑连接,然后再传输数据。
 

3.1 TCP: Transmission Control Protocloè 传输控制协议

    面向连接的协议

(a)   三次握手建立连接,形成数据传输通道

(b)   四次挥手断开连接

(c)    基于IO流进行数据传输

(d)   传输数据大小没有限制

(e)   因为是面向连接的,传输速度慢,但是可靠的协议

TCP协议的使用场景:

(a)   文件上传和下载

(b)   邮件发送

(c)    远程登录

3.2 TCP协议相关的两个类

Socket                  一个Socket对象代表一个客户端程序

ServerSocket         一个ServerSocket对象就代表一个服务器端程序

3.2.1 Socket

Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通信的端点。

构造方法:Socket(String host, int port)

根据主机名或IP地址和端口号创建Socket对象

一旦执行,就会立即连接指定的服务器指定的端口,如果连接失败,就会抛出异常

如果没有抛出异常,就代表建立连接成功

Socket类常用方法:

InputStream getInputStream()            返回此套接字的输入流

OutputStream getOutputStream()      返回此套接字的输出流

void close()                                       关闭套接字

void shutdownOutput                       禁用此套接字的输出流

3.3 ServerSocket

这个套接字实现了服务器套接字,该对象等待通过网络请求。

构造方法: ServerSocket(int port)

3.3.1 ServerSocket成员方法

Socket accept()

等待并接受客户端连接,获得与客户端相关连的Socket对象。该方法会一直阻塞直到建立连接

3.4 TCP通信步骤

3.4.1客户端实现步骤

(a) 创建Socket对象并关连服务器地址和端口号

(b) 调用Socket对象的getOutputStream方法获得字节输出流对象

(c) 调用字节输出流对象的write方法输出数据到服务器端

(d) 调用Socket对象的getInputStream 方法获得字节输入流对象

(e) 调用字节输入流对象的read方法获取服务器端的数据

(f) 调用socket对象的close方法断开连接

3.4.2 TCP服务端实现步骤

(a) 创建ServerSecket对象并指定端口号

(b) 调用ServerSocket对象的accept方法等待客户端连接并获得对应的socket对象

(c) 调用socket对象的getInputStream方法获得字节输入流对象

(d) 调用字节输入流对象的read方法获取客户端输入数据

(e) 调用Socket对象的getOutputstream方法获得字节输出流对象

(f) 调用字节输出流对象的write方法输出数据到客户端

(g) 调用socket对象的close方法断开连接

day011-网络编程的更多相关文章

  1. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  2. python select网络编程详细介绍

    刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...

  3. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  4. 猫哥网络编程系列:详解 BAT 面试题

    从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...

  5. 浅谈C#网络编程(一)

    阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...

  6. C++11网络编程

    Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...

  7. Java - 网络编程

    Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh.     参考:  

  8. Linux网络编程-IO复用技术

    IO复用是Linux中的IO模型之一,IO复用就是进程预先告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理,从而不会在单个IO上阻塞了.Linux中,提 ...

  9. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  10. iOS网络编程

    今天的重点是UIWebView.NSURLSession.JSon. 网络编程联网准备:1.在Info.plist中添加AppTransportSecurity类型Dictionary:2.在AppT ...

随机推荐

  1. CodeForces - 1110E-Magic Stones(差分+思维)

    Grigory has nn magic stones, conveniently numbered from 11 to nn. The charge of the ii-th stone is e ...

  2. 1085 PAT单位排行 (25 分

    每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整数 N(≤),即考生人数.随后 N 行,每行按下列格式给出一个考生的信息: 准 ...

  3. Python Flask框架之页面跳转

    IDE用的PyCharm(还是vs强大啊). 项目结构: 2:页面: <!doctype html> <html lang="zh"> <head&g ...

  4. b站弹幕的爬取以及词云的简单使用

    一.B站弹幕的爬取 1.分析发现,其弹幕都是通过list.so?=cid这个文件加载出来的,所以我们找到这个文件的请求头的请求url, 2. 打开url就能看到所有的评论 3. 上代码,解析 #!/u ...

  5. 金融量化分析-python量化分析系列之---使用python获取股票历史数据和实时分笔数据

    财经数据接口包tushare的使用(一) Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据.年度季度报表数据.实时分笔数据.历史分笔数据,本文对tushare的用法,已经存在的 ...

  6. (转)2017年最新企业面试题之shell(一,二)

    2017年最新企业面试题之shell(一) ********************************************** 企业Shell面试题1:批量生成随机字符文件名案例 * *** ...

  7. tornado handler 方法复用的 3 个方法

    tornado handler 调用 特性 在一次 tornado 请求中调用其他 tornado handler 中的方法, 比如 run 方法 引言 在后台开发中, 有时需要做一些功能的整合, 比 ...

  8. django(6)model表语句操作、Form操作、序列化操作

    1.model建表操作之创建索引.元数据 # 单表操作,创建表 class User(models.Model): name = models.CharField(max_length=32) ema ...

  9. C#事件(event)解析委托

    namespace Vczx.ProCSharp.Event { /// <summary> /// 类EatEventArgs 必须继承自类EventArgs,用来引发事件时封装数据 / ...

  10. java selector

    java selector使用select轮询注册到selector中的channel,如果有channel准备好注册的事件,select()返回,返回值为可以操作的channel的个数.通过sele ...