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. Moving docker images location to different partition

    By default docker will put all the data including images under /var/lib/docker(At least on Debian). ...

  2. artDialog不能拖拽的问题

    需要引用下面这个文件: https://github.com/aui/artDialog/edit/master/dist/dialog-plus.js

  3. 日志统计--蓝桥杯--vector

    /* 标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞&q ...

  4. ASP.Net Core 发布ABP项目遇到的错误

    1.HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作 ...

  5. (转载) win10生成SSH keys

    (转载) win10生成 SSH keys:   SSH key 可以让你在你的电脑和Code服务器之间建立安全的加密连接.  先执行以下语句来判断是否已经存在本地公钥: cat ~/.ssh/id_ ...

  6. Excel&&word&&PPT

    1. Excel 1.1 制作下拉框 选中单元格或列--> 菜单"数据" --> "数据验证"-->"设置" --> ...

  7. hdu 2845——Beans——————【dp】

    Beans Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. 从Zero到Hero,一文掌握Python关键代码

    # 01基础篇 # 变量 #int one=1 some_number=100 print("one=",one) #print type1 print("some_nu ...

  9. ebiao 报表工具使用入门

    一.ebiao简价 e表是一个功能强大的Web报表工具,可使复杂报表的设计简单化,避免了大量的复杂SQL编写以及编程来准备数据,报表设计的效率大大提高.e表分为e表 for .NET和e表 for J ...

  10. Shell脚本检测程序,如果挂了就重启程序

    脚本如下: #!/bin/sh #要检查的进程名 PROGRESS_NAME="heihu_server" #----------------------------------- ...