Java程序设计学习笔记(六) — 网络编程
时间:2016-5-8 02:03
——网络编程
网络传输实际上就是进行数据传输。
一、传输的步骤:
1、对对方IP地址进行定位。
2、将数据打包发送到对方指定的应用程序上,为了有效的标识这些应用程序,就给这些网络应用程序使用数字进行标识。
这些数字就叫做端口(号),该端口并不是物理上的端口,而是逻辑上的端口。
端口号范围:0 ~ 65535,通常情况下,0 ~ 1024号端口被系统所保留了。
Web端口:80 Tomcat服务器:8080 MySQL:3306
3、定义通讯规则,这个通讯规则称为协议。
为了规范标准,国际标准化组织就定义了一个通讯协议:TCP/IP协议。
还有常用协议:UDP协议。
127.0.0.1:本地回环地址,如果电脑没有配置任何IP地址的情况下,默认就是该地址,可以用来测试网卡。
二、网络模型
OSI参考模型
开放系统互连参考模型 (Open System Interconnect 简称OSI),为开放式互连信息系统提供了一种功能结构的框架。
它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
网络编程操作的就是网络层和传输层。
网络层和传输层的协议是TCP/IP协议。
Web开发操作的是应用层。
应用层协议是HTTP协议,还有FTP协议。
TCP/IP参考模型
三、网络通讯要素
IP地址
网络中设备的标识。
不易记忆,可用于主机名。
本地回环地址:127.0.0.1 主机名:localhost
广播地址:192.168.1.255 当发送数据时没有找到指定IP地址,就会将数据发送到广播地址。
net包中用于描述IP地址的类是:InetAddress类,该类无构造方法,但是却有非静态方法,可以猜测该类使用了单例设计模式。
InetAddress可以通过getLocalHost()来获取本类对象。
四、端口号
用于标识进程的逻辑地址,不同进程的标识不同。
有效端口:0 ~ 65535,其中0 ~ 1024 由系统使用或是保留端口。
五、传输协议
通讯的规则。
常见的传输协议:TCP/IP协议,UDP协议。
——Socket(网络应用程序)
网络编程其实就是Socket编程。
Socket就是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket之间通过IO传输。
——TCP
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
建立连接,形成传输数据的通道。
在连接中进行大数据量传输。
通过三次握手完成连接,是可靠协议。
必须建立连接,效率会稍低。
——UDP
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议。
是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,也就是不管对方能不能接收,只负责发送数据。
将数据及源和目的封装在数据包中,不需要建立连接。
每个数据包的大小限制在64KB内。
因为无连接,所以是不可靠协议。
不需要建立连接,速度快。
UDP传输:
UDP传输特有对象:
DatagramSocket和DatagramPacket
建立发送端和接收端
建立数据包
调用Socket的发送接收方法
关闭Socket
发送端与接收端是两个独立运行的程序。
——注意
每个协议有自己特有的传输方式,所以传输的对象也不同。
——DatagramSocket
此类表示用来发送和接收数据报包的套接字(Socket、插座)
构造方法:
DatagramSocket()
构造数据报套接字并将其绑定到本地主机上任何可用端口,也就是随机指定端口。
DatagramSocket(int port)
创建数据报套接字并将其绑定到本地主机上的指定端口。
DatagramSocket(int port, InetAddress addr)
创建数据报套接字,将其绑定到指定的本地地址。
方法摘要:
void bind(SocketAddress addr)
将此DatagramSocket绑定到指定的地址和端口。
void close()
关闭连接。
因为占用端口,所以需要关闭连接。
void disconnect()
断开套接字的连接。
InetAddress getInetAddress()
返回此套接字连接的地址。
InetAddress getLocalAddress()
返回此套接字绑定的本地地址。
int getLocalPort()
返回此套接字绑定的本地主机上的端口号。
int getPort()
返回此套接字的端口号。
void send(DatagramPacket p)
从此套接字发送数据报包。
因为需要发送的数据非常复杂,所以把数据包封装成对象。
void receive(DatagramPacket p)
从此套接字接收数据报包。
boolean isBound()
返回此套接字的绑定状态。
boolean isClosed()
返回是否关闭套接字。
boolean isConnectied()
返回套接字的连接状态。
——DatagramPacket
此类表示数据报包,用来实现无连接包投递服务。
每条报文仅根据包中包含的信息从一台机器路由到另一台机器。
构造方法:
凡是构造方法参数中带地址(InetAddress)和端口(port)的,都是用来发送数据的。
DatagramPacket(byte[] buf, int length)
构造DatagramPacket,用来接收长度为length的数据包。
只有这一个构造方法是用来接收数据的。
DatagramPacket(byte[] buf, int lengt, InetAddress address, int port)
构造DatagramPacket,用来将长度为length的包发送到指定主机上的指定端口号。
方法摘要:
InetAddress getAddress()
返回某台机器的IP地址。
返回的是将要发送的机器或者是已经发送到的机器的IP地址。
byte[] getData()
返回缓冲区数据。
int getLength()
返回将要发送或者接收到的数据的长度。
int getPort()
返回某台远程主机的端口号。
void setData(byte[] buf)
为此数据包设置数据缓冲区。
void setLength(int length)
为此数据包设置长度。
void setPort(int port)
为此数据包设置将要发送的远程主机的端口号。
——InetAddress
方法摘要:
static InetAddress getByName(String host)
在给定主机名的情况下确定主机的IP地址并获得该地址对象。
如果使用获得的对象来获取主机名,如果主机名与IP地址在网络上没有映射关系的话,无法通过该对象获取对应IP地址的主机名。
static InetAddress[] getAllByName(String host)
当面对集群式服务器的时候,一个主机名可能对应多个IP,所以以数组形式接收返回对象。
String getHostAddress()
返回IP地址字符串。(以文本形式表现)
String getHostName()
获取此IP地址的主机名。
static InetAddress getLocalHost()
返回本地主机。
int hashCode()
返回此IP地址的哈希值。
String toString()
将此IP地址转换为String。
boolean isReachable(int timeout)
测试是否可以达到该地址。
=============================================================================
模拟一次通讯
发送数据 UDPSend
接收数据 UDPReceive
}
---------------------------------------------------------------------------------------------------------------------------------------------------------
当开启UDPReceive之后,执行UDPSend,控制台输出如下
127.0.0.1...aaa...22222
================================================================================================
使用UDP监听键盘录入
----------------------------------------------------------------------------------------------------------------------------------------------------
===========================================================================================
模拟聊天
new Thread(new Send(sendSocket)).start();
}
——TCP传输
Socket和ServerSocket
UDP分为发送端和接收端。
TCP分为客户端和服务器端。
建立连接后,通过Socket中的IO流进行数据的传输。
同样,客户端与服务器端是两个独立的应用程序。
——Socket类
此类实现客户端套接字,套接字是两台机器间通信的端点。
构造方法:
Socket()
创建一个系统默认类型的SocketImpl创建未绑定任何连接的套接字。
可以通过Socket类的方法来指定连接。
void connect(SocketAddress endpoint)
将此套接字连接到服务器。
Socket(InetAddress addr, int port)
创建一个流套接字并将其连接到指定IP地址的指定端口号。
该方法说明了Socket一创建就要连接到指定的服务端。
==========================================================================================
使用TCP建立一次传输
TCP服务端
--------------------------------------------------------------------------------------------------------------------------------------------------
建立客户端
Java程序设计学习笔记(六) — 网络编程的更多相关文章
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- 20155324 《Java程序设计》实验五 网络编程与安全
20155324 <Java程序设计>实验五 网络编程与安全 实验内容 任务一 编写MyBC.java实现中缀表达式转后缀表达式的功能 编写MyDC.java实现从上面功能中获取的表达式中 ...
- 20155317 《Java程序设计》实验五网络编程与安全实验报告
20155317 <Java程序设计>实验五网络编程与安全实验报告 遇到问题 在刚开始启动客户端或者服务端时,出现了一系列的错误情况,总是提示异常信息 后来经过询问同学,反应将端口号修改一 ...
- 20155339 《Java程序设计》实验五网络编程与安全实验报告
20155339 <Java程序设计>实验五网络编程与安全实验报告 实验内容 实验一 1.两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/67667 ...
- 20155326 《Java程序设计》实验五网络编程与安全实验报告
20155326 <Java程序设计>实验五网络编程与安全实验报告 实验内容 任务一 1.两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/67667 ...
- 20155301 《Java程序设计》实验五网络编程与安全
20155301 <Java程序设计>实验五网络编程与安全 实验内容 实验1: 两人一组结对编程:参考http://www.cnblogs.com/rocedu/p/6766748.htm ...
- 20155308 《Java程序设计》实验五 网络编程与安全
20155308 <Java程序设计>实验五 网络编程与安全 实验内容 任务一 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.ht ...
- 20155320 《Java程序设计》实验五网络编程与安全实验报告
20155320 <Java程序设计>实验五网络编程与安全实验报告 实验内容 实验一 1.两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/67667 ...
- 20155338 《JAVA程序设计》实验五网络编程与安全实验报告
20155338 <JAVA程序设计>实验五网络编程安全实验报告 实验内容 实验一: •两人一组结对编程: •结对实现中缀表达式转后缀表达式的功能 MyBC.java •结对实现从上面功能 ...
- Java IO学习笔记六:NIO到多路复用
作者:Grey 原文地址:Java IO学习笔记六:NIO到多路复用 虽然NIO性能上比BIO要好,参考:Java IO学习笔记五:BIO到NIO 但是NIO也有问题,NIO服务端的示例代码中往往会包 ...
随机推荐
- 解决linux下按退格键出现 ^? 的问题
处理办法:使用stty命令修改. stty命令语法 stty是linux下改变和打印终端设置的常用命令. stty(选项)(参数) -a:以容易阅读的方式打印当前的所有配置: -g:以stty可读方式 ...
- sql-5-事务,索引
事务 1.ACID概念 原子性(Atomicity) 要么都成功,要么都失败 一致性(consistency) 事务前后的数据完整性保持一致 持久性(Durability) 事务一旦提交则不可逆,持久 ...
- VSCode 如何远程连接其他主机的 WSL2
VSCode 如何远程连接其他主机的 WSL2 VSCode 的 Remote Deployment 插件对 WSL2 直接提供了支持,能够很方便的连接本机的 WSL2 ,但是并没有提供一个连接远程 ...
- poj1182:食物链
poj1182:食物链 听说是poj中最经典的一道并查集题目.我一做,果然很经典呢!好难啊!!!真的琢磨了很久还弄懂.这道题的重点就在于怎么用并查集表示题目中的关系环. 1. 题干 原题传送门1 原题 ...
- 第六篇--MFC美化界面
1.MFC如何设置背景颜色 首先,为对话框添加WM_CTLCOLOR消息,方法为:右击Dialog窗口 --> Class Wizard --> Messages --> WM_CT ...
- PhotoShop CC2015(64位)下载链接和破解教程
photoshop如今有cc和cs两种版本,之前出了一个cs的破解教程和扣圆形图,有很多朋友说cc比cs好用的多,希望出个cc的下载链接和破解教程,故推出2015pscc版破解教程和下载链接. 百度云 ...
- 构建前端第12篇之---在Vue中对组件,变量,函数的全局引入
张燕涛写于2020-01-16 星期two 本篇还是源于import和export的使用,昨天看es6入门 和MDN文档,大体上用法了解了,但今天看ElementUI源码的时候,看到 //src/in ...
- InnoDB锁机制-转载
InnoDB锁机制 1. 锁类型 锁是数据库区别与文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问. InnoDB使用的锁类型,分别有: 共享锁(S)和排他锁(X) 意向锁(IS和IX) 自 ...
- D. 旅游景点 Tourist Attractions 状压DP
题目描述 FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺序不是完全随意的,比如说FGD 不希望在刚吃过一顿大餐之后立刻去下一 ...
- Netty入门(三):EventLoop
前言 Netty系列索引: 1.Netty入门(一):ByteBuf 2.Netty入门(二):Channel IO相关: 1.Java基础(一):I/O多路复用模型及Linux中的应用 上文提到,早 ...