Java语言入门(十二)——网络编程
发布日期:2022-02-28 07:22:50
浏览次数:43
分类:技术文章
本文共 3871 字,大约阅读时间需要 12 分钟。
Java语言入门
计算机网络分类
- 按规模大小和延伸范围划分:局域网,域域网,广域网
- 按网络的拓扑结构划分:环形网,星行网,总线型网等
- 按通信传输的介质划分:双绞线网,同轴电缆网,光纤网和卫星网等
- 按信号频带占方式划分:宽带网和基带网
计算机网络工作模式
- 专用服务器结构(又称工作站/文件服务器结构) 由若干台微机工作站与一台或多台文件服务器,通过通信线路连接起来,组成工作站存取服务器文件,共享存储设备。
- 客户机/服务器模式 其中一台或几台较大的计算机集中进行共享数据库的管理和存取,成为服务器,而将其它的应用处理工作分散到网络中国其它微机上去做,构成分布式的处理系统。
- 对等式网络 在拓扑结构上与专用Server与C/S相同。在对等式网络结构中,没有专用服务器。每一个工作站,既可以起客户机作用,也可以起服务器作用
网络通信协议及接口
- 网络通信协议 计算机网络中实现通信必须有一些约定,即通信协议,对速率,传输代码,代码结构,传输控制步骤,出错控制等制定标准。
- 网络通信接口 为了使两个结点之间能进行对话,必须在他们之间建立通信工具,即接口。接口包括两部分: (1)硬件装置:实现结点之间的信息传送 (2)软件装置:规定双方进行通信的约定协议
通信协议分层的思想
- 由于结点之间联系很复杂,在制定协议时,把复杂成分分解成一些简单的成分,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信,上一层可以调用下一层,而与下一层不发生关系。
- 通信协议的分层规定: 把用户应用程序作为最高层,把物理通信线路作为最低层,将其间的协议处理分为若干层,规定每层处理的任务,也规定每层的接口标准。
通信协议参考模型
常用网络通信协议
- TCP/IP协议(传输控制协议/网际协议)
- HTTP协议(超文本传输协议)
- FTP协议(文件传输协议)
- SMTP协议(简单邮件传输协议)
- POP3/IMAP协议(邮局协议版本3/Internet消息访问协议)
IP地址/域名/端口
- IP地址(命令行模式下ipconfig/all) TCP/IP使用IP地址来标识源地址和目的地址 IP地址格式:166.111.78.98 目前正在普遍使用的IP协议时第四版,称为“IPv4”。新版本的IPv6协议也已经开始推广。
- 域名 便于记忆的字符串形式,如“news.sina.com.cn” 与IP地址间存在映射关系,由位于网络中的域名服务器(DNS)负责将域名解析为相应的IP地址。
- 端口 逻辑意义上的数据传输通道,或者说模拟通道。TCP/IP协议约定,每台计算机拥有65536个这种逻辑通信端口。 端口号:用于标识这些端口的整数编号,其取值范围为0~65536。
相关API
- JDK中java.net包中定义了与IP地址/域名有关的类。
- java.net.InetAddress 32位或128位无符号数字表示的IP地址
- java.net.Inet4Address 继承了InetAddress类,以32位无符号数字表示的IPv4地址。其典型表示形式是由原点分隔开的4段、取值范围0~255的十进制数值,例,166.111.78.98
- Java.net.Inet6Address 继承了InetAddress类,以128位无符号数字表示的Ipv6地址。其典型表示形式是由冒号分隔开的8段、取值范围0000~FFFF的十进制数值,例,1080:0:0:0:8:800:200C:417A
- 举例:TestInetAddress.java
- 方法 (1)static InetAddress getLocalHost() 返回本地主机。 (2)String getHostName() 获取此 IP 地址的主机名。 (3)String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。 (4)static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
import java.net.*;public class TestInetAddress{ public static void main(String[] args) { try { InetAddress ia=InetAddress.getLocalHost(); showInfor(ia); ia=InetAddress.getByName("www.sina.com.cn"); showInfor(ia); }catch(java.net.UnknownHostException e) { e.printStackTrace(); } } public static void showInfor(InetAddress ia) { String name=ia.getHostName(); String address= ia.getHostAddress(); System.out.println(name); System.out.println(address); }}
URL
- Uniform Resoure Locator的缩写,即统一资源定位器,用于表示Internet上资源的地址。
- URL格式: <协议名><资源所在主机名>[:<端口号>]<资源名> http://home netscape.com/home/welcome html http://www.sun.com http://iask.sina.com.cn/b/9848848.html
- Java.net包中定义了URL类,常用方法如下:
- URL(String spec) 根据 String 表示形式创建 URL 对象。
- InputStream openStream() 打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。
- 用法举例 :TestURL.java // java -Dhttp.proxyHost=192.168.1.1 -Dhttp.proxyPort=11080 TestURL
import java.io.*;import java.net.*;class TestURL { public static void main(String[] args) { //System.setProperty("http.proxyHost","192.168.1.1"); //System.setProperty("http.proxyPort","11080"); try { URL h=new URL("http://www.google.cn/"); BufferedReader in=new BufferedReader(new InputStreamReader(h.openStream())); String s; while ((s=in.readLine())!=null) System.out.println(s); in.close(); }catch (MalformedURLException e) { System.out.println(e);} catch(IOException e){ System.out.println(e);} } }
Socket编程(双向连接)
- 两个进程间可以通过一个双向的网络通信连接现实数据交换,这种通信链路的端点被称为“套接字”(Socket)。
- Socket通常用来实现Client-Server连接。 建立连接时所需的寻址信息:远程计算机的机器名或IP地址;试图连接的端口号(Port number)
- java.net包定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端
Socket通信模型
Socket编程基本步骤
- 建立网络连接
- 打开连接到Socket的输入/输出流
- 通过已打开的I/O流进行数据读/写操作
- 关闭已打开的I/O流和Socket
类
- public class Socket extends Object 此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
- public class ServerSocket extends Object 此类实现服务器套接字。服务器套接字等待请求通过网络传入。
方法
- Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
- ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
- Socket accept() 侦听并接受到此套接字的连接。
- Socket() 通过系统默认类型的 SocketImpl 创建未连接套接字
- void close() 关闭此套接字。
转载地址:https://blog.csdn.net/weixin_45854582/article/details/106231310 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年03月24日 01时58分24秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android 自定义View实现炮弹射击小游戏
2019-04-26
mysql设置不区分大小写
2019-04-26
linux下安装redis
2019-04-26
linux安装nginx(centos/Ubuntu/debian)
2019-04-26
linux下安装artemis
2019-04-26
mysql查询某属性值出现次数大于1
2019-04-26
mysql处理跨连接(dblink)
2019-04-26
mysql游标循环表与存储过程传参
2019-04-26
nginx配置文件里user只能是root,否则报403错误
2019-04-26
nginx 中location中root和alias的区别
2019-04-26
flowable集成后扫描不到jar包中mapping而报错
2019-04-26
flowable表单设计器选型
2019-04-26
高可用 Redis 服务架构分析与搭建
2019-04-26
flowable使用extensionElements自定义节点
2019-04-26
flowable自定义节点属性
2019-04-26
UE4-Gameplay技能系统
2019-04-26
TArray的MoveTemp推荐
2019-04-26
UnrealVS插件使用
2019-04-26
UE4 Low Level Memory Tracker使用
2019-04-26
UE4 PhyX物理引擎应用介绍
2019-04-26