java编程笔记
只能看到交互的双方及交互协议 个人认为可以看做人与人之间按照约定方式进行交流
HTTP协议:超文本传输协议(用于实现Web文档的请求和转发)
SMTP协议:简单电子邮件传输协议
FTP协议:文件传输协议
Telnet协议:网络远程访问协议
传输层:提供客户端和服务器之间传输应用层报文的服务 对等体:段或用户数据报 次高抽象层,为交互双方提供信息传输服务 个人认为可以看做为人与人之间交流提供途径,如“写信”
TCP:面向连接的服务 管生又管养
UDP:无连接服务 管生不管养
网络层:按照运输层协议,提供主机之间传递数据报的服务 对等体:数据包 个人认为可以看做实现了信件在省份之间的收发服务
数据链路层 对等体:帧 个人认为可以看做实现了信件在城市之间的收发服务
物理层 对等体:位 个人认为可以看做实现了信件在具体邮局之间的收发服务
TCP/IP的一些基本概念
IP地址:连接到TCP/IP网络上的每台设备的唯一地址标识
端口(Port):每台设备中每个应用程序的唯一标识
套接字(Socket):通信端点,由IP地址+端口号组成
传输控制协议(TCP)
面向连接的保证可靠传输的协议
收发双方的一对socket建立连接后进行双向数据传输、
用户数据报协议(UDP)
无连接传输协议,无序,不一定安全,但简单效率高
将要传输目的地定义成数据报(Datagram) 在数据报中指明要到达的端点(Socket) 发送数据报
域名
服务器地址的别名
Java网络编程
通过流模式实现网络交互,一个接口同时拥有输入流和输出流 一个进程向端口输出流写数据,另一个进程在接口的输入流上读数据即可
Java提供的网络编程类
简记方法:
带URL的为面向应用层的类
带Socket的为面向运输层中TCP协议相关的类
带Datagram的为面向运输层中UDP协议相关的类
带Exception的为各种异常
领域类名面向应用层的类URL URLConnection面向运输层中与TCP协议相关的类Socket ServerSocket面向运输层中与UDP协议相关的类DatagramPakcet DatagramSocket MulticastSocket指向网络层的类InetAddress可能产生的异常BindException ConnectException MalformedURLException NoRouteToHostException ProtocolException SocketException UnknownHostException UnknownServiceException
InetAddress的使用
Java的IP地址封装类
无构造函数,直接用静态方法获取InetAddress实例
public static InetAddress getByName(String host);
public static InetAddress getLocalHost();
public static InetAddress[] getAllByName(String host);
//host可以是机器名、IP地址或DSN域名
//潜在异常:UnknownHostException
InetAddress的主要方法
public byte[] getAddress()
//获取本对象的IP地址并存放在字节数组中
public String getHostAddress()
//获取本对象的IP地址“%d.%d.%d.%d”
public String getHostName()
//获取本对象的机器名
统一资源定位器(URL)
Internet上资源地址的统一表达格式
语法格式:<protocol>:// <host : port>/dir/filename <要获取资源的传输协议> :// <主机:端口号>/目录/文件名
//URL构造方法
public URL (String spec);
//spec:URL地址
public URL (URL context String spec);
//context:现有URL对象
//基于一个URL对象访问同一主机上不同路径的文件
public URL (String protocol,String host,String file);
public URL (String protocol,String host,int port,String file)
//协议、机器名称、端口号、文件名//URL常用方法
public String getProtocol;//获取URL协议名
public String getHost;//获取URL主机名
public int getPort;//获取URL端口号
public String getFile;//获取URL文件名
public String getRef;//获取URL相对位置
public String getPath;//获取URL的路径
public String getAuthority;//获取URL的权限信息
public String getUserInfo;//获取使用者信息
读入URL数据
openStream():读取一个URL对象指定的资源 与指定URL建立连接并返回一个InputStream对象
Socket接口
分为服务器端(ServerSocket)和客户端(Socket)
通信步骤
服务器端生成ServerSocket对象,用accept()等待客户端的连接请求
客户端生成Socket对象并发出连接请求
服务器端通过accept()方法接收到客户端的请求后,开辟连接用的接口,并生成所需I/O数据流
服务器端和客户端通过由客户端提供的Socket中的InputStream和OutputStream进行通信
通信结束后,服务器端关闭通过accept()得到的Socket接口,客户端也要关闭Socket接口
客户端Socket类
//Socket构造方法
public Socket(String address,int port);
public Socket(InetAddress address,int port)
public Socket(String host,int port,InetAddress localAddress,int localPort);
public Socket(InetAddress address,int port,InetAddress localAddress,int localPort);
Socket类主要方法
方法名功能void close()关闭Socket连接InetAddress getInetAddress()获取当前连接的远程主机的Internet地址InetAddress getLocalAddress()获取本地主机的Internet地址InputStream getInputStream()获取Socket输入流OutputStream getOutputStream()获取Socket输出流int getPort()获取当前连接的远程主机的端口号int getLocalPort()获取本地主机的端口号void shutdownInput()关闭输入流void shutdownOutput()关闭输出流
服务器ServerSocket类
ServerSocket类用于监听来自指定端口的连接
在为新的连接创建一个Socket对象以后,客户端便可与服务器端进行通信
//ServerSocket类构造方法
public ServerSocket(int port);
public ServerSocket(int port,int backlog);
public ServerSocket(int port,int backlog,InetAddress bindAddress);
//port:端口号
//backlog:服务器忙时保持连接请求的等待客户量
//bindAddress:指定的服务器IP地址
ServerSocket类主要方法
方法名功能Socket accept()接收该连接并返回该连接的Socket对象void close()关闭此服务器的SocketInetAddress getInetAddress()获取服务器Socket绑定的地址int getLocalPort()获取服务器Socket所侦听的端口号int getSoTimeout()获取连接的超时数void setSoTimeout(int timeout)设置ServerSocket的accept()方法等待用户连接的超时时间 timeout默认为0,表示永远不超时,直接进入阻塞状态
异常的处理方式:抛出异常后,首先使用new在堆上创建异常对象。然后,当前的执行路径被终止,从当前环境跳到对异常对象的引用。寻找下一个恰当的位置(异常处理程序)继续执行,它的任务是从错误状态种恢复,以使程序能要么换一种方式运行,要么继续运行下去。
异常抛出:
throw:使用它来抛出异常,可以把它类比return操作符(注意是类比,因为异常的处理位置可能会跨越方法调用栈的许多层级,而不是简单的跳出该方法),它能抛出异常,并且跳出当前作用域。它能抛出任意类型的Throwable对象(通常异常的唯一信息来自于它的名字)。
异常捕获:
异常抛出了就得处理嘛,有两种方式:
try-catch-finally语句(只有在你知道如何处理的情况下才捕获异常。):
catch语句只有匹配的异常类型才会执行,try-catch是 必须的结构。
而finally语句一般在需要手动释放资源时是必须的,它总会被执行(无论break、continue还是return一样会执行)。所以注意不要因为使用了finally而跳过了某些异常,比如finally中抛出异常,或者直接return跳出当前层次。
throws:声明异常,谁调用谁处理。
终止与恢复:
·.终止:在这种模型中,将假设错误非常严重,以至于程序无法返回到异常发生的地方继续执行。一旦异常被抛出,就表明错误已无法挽回,也不能回来继续执行。
·.恢复:在这种模型中,将假设错误非常严重,以至于程序无法返回到异常发生的地方继续执行。一旦异常被抛出,就表明错误已无法挽回,也不能回来继续执行。(可以不用抛出异常,调用方法来修正该错误,或者把try块放在while循环,这样就不断地进入 try 块,直到得到满意的结果)
自定义异常类型:继承Exception就行了(如果想要写入System.err 而将错误发送给标准错误流,可以写一个String 的构造器,并赋值给父类)。注意命名规范。