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. windows cmd 切换磁盘

    抛砖引玉 切换到D盘根目录——cd /d D: 切换到D:\dev目录——cd  /d  D:\dev

  2. 动态规划 70.climbing Stairs

    1. 记忆化搜索 - 自上向下的解决问题:使用vector来保存每次计算的结果,如果下次再碰到同样的需要计算的式子就不需要重复计算了. 2. 动态规划 - 自下向上的解决问题 解法一:自顶向下 解法二 ...

  3. bzoj2212 Tree Rotations 线段树合并+动态开点

    题目传送门 思路: 区间合并线段树的题,第一次写,对于一颗子树,无论这个子树怎么交换,都不会对其他子树的逆序对造成影响,所以就直接算逆序对就好. 注意叶子节点是1到n的全排列,所以每个权值都只会出现1 ...

  4. nodejs下载器,通过chrome代理下载http资源

    var config={ //不想访问的东西,节约流量 "404":[ "http://qidian.qpic.cn/qdbimg" ], //奇数为需要下载的 ...

  5. scala 中格式化字符常用的格式符

    val name="Fred" val age=20 val weight=150.00 val dd="%s's age is %d,weighs %.2f" ...

  6. Fedora中安装VLC播放器

    需要在机器上安装VLC,无奈不能直接通过yum安装,网上搜了一下,直接安装成功,其实挺简单的: 我的机器是Fedora15,其他的类似: ------------------------- 首先:su ...

  7. 图解CSS的padding,margin,border属性(详细介绍及举例说明)

    图解CSS的padding,margin,border属性 W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层 ...

  8. AI从入门到放弃:CNN的导火索,用MLP做图像分类识别?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:郑善友 腾讯MIG后台开发工程师 导语:在没有CNN以及更先进的神经网络的时代,朴素的想法是用多层感知机(MLP)做图片分类的识别:但 ...

  9. JS字符串与二进制的相互转化

    //字符串转ascii码,用charCodeAt(); //ascii码转字符串,用fromCharCode(); var str = "A"; var code = str.ch ...

  10. 关于如何绕开对通用VMware虚拟机检测的一些收集

    1,用记事本打开虚拟系统镜像文件的配置文件,这个文件扩展名为vmx,比如我的虚拟系统名为XP,那这个文件就叫XP.vmx,然后在其末尾添加这么一句,如下红色部分(注意,虚拟机不能在运行状态添加) mo ...