JAVA(网络编程基础知识总结)


今天主要总结一下关于前段时间自学的网络编程的基础知识,带你了解网络通信协议和端口以及客户段和服务器端的连接。

网络通信协议的分层

名义上标准:ISO/OSI参考模型

事实上标准:TCP/IP协议栈(Internet使用的协议)

TCP通讯

定义:一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议

特点:

  • 1、面向连接

    2、点到点的通信

    3、高可靠性:三次握手、

    4、占用系统资源多、效率低

UDP通讯

定义:一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务

特点:

  • 1、非面向连接,传输不可靠,可能丢失

    2、发送不管对方是否准备好,接收方收到也不确认

    3、可以广播发送

    4、非常简单的协议,开销小

IP地址与端口

IP地址

定义:用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。

IP地址分类

  • IPV4:32位地址,以点分十进制表示,如192.168.0.1

    IPV6:128位(16个字节)写成8个16位的无符号整数,每个整数用四个十六进制位表示,数之间用冒号(:)分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984

特殊的IP地址

  • 127.0.0.1 本机地址

    192.168.0.0–192.168.255.255私有地址,属于非注册地址,专门为组织机构内部使用。

端口(port)

  • IP地址用来标志一台计算机,但是一台计算机上可能提供多种应用程序,使用端口来区分这些应用程序。

  • 端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程序。

  • 端口范围0—65535,16位整数

理解IP和端口的关系

  • IP地址好比每个人的地址(门牌号),端口好比是房间号。必须同时指定IP地址和端口号才能够正确的发送数据

  • IP地址好比为电话号码,而端口号就好比为分机号。

端口分类

  • 公认端口 0—1023 比如80端口分配给WWW,21端口分配给FTP

    注册端口 1024—49151 分配给用户进程或应用程序

    动态/私有端口 49152–65535

InetAddress类

  • 封装计算机的ip地址 ,没有端口

    使用getLocalHost方法创建InetAddress对象

    getHostAddress()返回计算机ip地址

    getHostName()返回计算机名字

    根据域名得到InetAddress对象

    getByName(“网易”)

    getHostAddress()返回 163服务器的ip:61.135.253.15

    getHostName()输出:网易

    根据ip得到InetAddress对象

    InetAddress.getByName(“61.135.253.15”);

    getHostAddress()返回 163服务器的ip:61.135.253.15

    getHostName()

    InetSocketAddress类 包含端口,用于socket通信的 URL(Uniform Resource Locator) 定义

    统一资源定位符,由4部分组成:协议 、存放资源的主机域名、端口号和资源文件名。

    URL是指向互联网“资源”的指针。

    资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。

Socket套接字

  • Socket实际是网络传输层供给应用层的编程接口。传输层则在网络层的基础上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台主机的某一进程通信。

  • Socket就是应用层与传输层之间的桥梁

  • 使用Socket编程可以开发客户机和服务器应用程序,可以在本地网络上进行通信,也可通过Internet在全球范围内通信。

TCP编程原理

TCP通信原理

  • 1、服务器创建ServerSocket,在指定端口监听并并处理请求

  • 2、客户端创建Socket,向服务器发送请求

TCP创建步骤

服务器端

TCP实现文件上传服务端:

  • 1、定义服务端 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。

  • 2、阻塞式监听 一个客户端连接成功,就是一个socket

  • 3、io操作 :从客户端读入数据 —>文件输出流 写出文件中

  • 4、刷出

  • 5、关闭

TCP实现文件上传客户端 :

  • 1、定义客户端 Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。

  • 2、IO操作 先从文件中读入数据–>写出数据
    new FileInputStream("");
    输出流OutputStream getOutputStream() 返回此套接字的输出流。

  • 3、刷出

  • 4、关闭

UDP基本概念

  • DatagramSocket:用于发送或接收数据包

  • DatagramPacket:数据包

网络登录功能分解

  • 单向:客户端向服务器端发送字符串,服务器获取字符串并输出

  • 双向:服务器端给出客户端反馈,客户端得到反馈并输出

  • 对象:客户端向服务器端发送User对象,服务器端获取对象并输出

  • 多线程:服务器接收多个客户端的请求,并给出反馈

  • 每个客户请求开启一个线程

网络登录功能总结

1、服务器创建ServerSocket,在指定端口监听并并处理请求;

2、ServletSocket通过accept() 接收用户请求并返回对应的Socket,否则一种处于监听等待状态,线程也被阻塞

3、客户端创建Socket,需要指定服务器的ip和端口号,向服务器发送和接收响应

4、客户端发送数据需要输出流(写),客户端获取反馈数据需要输入流(读)

5、服务端反馈数据需要输出流(写),服务端获取请求数据需要输入流(读)

6、一旦使用ServerSocket和Socket建立了网络连接后,网络通信和普通IO流操作并没有太大区别

7、网络通信输出流建议使用DataOutputStream和ObjectOutputStream,与平台无关,输入流相应使用DataIntputStream和ObjectInputStream

8、如果是字符串通信也可以使用BufferedReader和PrintWriter,简单方便

UDP编程原理

发送端的基本流程: (发送端和服务端是平等的)

  • 1、定义发送端 DatagramSocket(端口号) 指定发送端的端口号

  • 2、准备数据

  • 3、对数据打包 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
    构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。

  • 4、发送void send(DatagramPacket p)

  • 5、关闭 void close() 关闭此数据报套接字。

接收端基本流程:

  • 1、定义接收端 DatagramSocket(int port)

  • 2、准备字节数组

  • 3、准备包裹用来接收数据 DatagramPacket(byte[] buf, int length)

  • 4、接收

  • 5、从包裹中获取数据
    1.byte[] getData() 返回数据缓冲区。
    2 int getLength()
    返回将要发送或接收到的数据的长度。

  • 6、关闭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值