欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《疯狂Java讲义》学习笔记(十三)网络编程

程序员文章站 2022-06-06 21:21:55
...

1、基本网络支持

  • 使用InetAddress
    Java提供了InetAddress类来代表IP地址,InetAddress下还有两个子类:Inet4Address、Inet6Address,分别代表IPv4和IPv6地址
// 可以通过如下两个静态方法来获取InetAddress实例:
getByName(String host):根据主机域名获取
getByAddress(byte[] addr):根据原始IP获取
// 常用API:
String getCanonicalHostNam():获取全限定域名
String getHostAddress():返回对应的IP地址
String getHostName():获取IP地址的主机名
boolean isReachable():测试是否可以到达该地址
  • 使用URLDecoder和URLEncoder
    在地址头中如果出现中文字符,可能换转换成类似乱码,事实上不是乱码,这是application/x-www.form-urlencoded MINE字符串
    URLDecoder类包含一个decode(String s,String enc)静态方法,它可以将看上去是乱码的特殊字符串转换成腹痛字符串,类似解密
    URLEncode类包含一个encode(String s,String enc)静态方法,它可以将普通字符串转换成application/x-www.form-urlencoded MINE字符串
  • URL、URLConnection和URLPermission
    URL对象代表题哦那诡异资源定位器,它是指向互联网资源的指针;URL可以由协议名、主机、端口和资源组成:
    protocol://host:port/resourceName
    URI实例代表一个统一资源识别符,它不能定位任何资源,唯一作用就是解析;而URL则包含一个可打开到达该资源的输入流,可以将URL理解成URI的特例
    常用API:
String getFile():获取该URL的资源名
String getHost():获取该URL的主机名
String getPath():获取该URL的路径部分
int getPort():获取该URL的端口
String getProtocol():获取该URL的协议名称
String getQuery():获取该URL的查询字符串部分
URLConnection openConnection():返回一个URLConnection对象,它代表了与URL所引用的远程对象的连接
InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream

2、基于TCP协议的网络编程

TCP/IP通讯协议在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路
IP和TCP这两个协议的功能不尽相同,也可以分开单独使用,但它们是在同一时期作为一个协议来设计的,并且在功能上也是互补的;只有结合两者,才能保证Internet在复杂的环境下正常运行。凡事要连接到Internet的计算机,都必须同时安装和使用这两个协议,因此在实际中常把这两个协议统称为TCP/IP协议
- 使用ServerSocket创建TCP服务器端
Java中能接收其它通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状态。ServerSocket包含一个监听来自客户端连接请求的方法:

Socket accept():接收到连接请求后返回一个与客户端Socket对应的Socket
ServerSocket(int port):用指定的端口port来创建一个ServerSocket,该端口应该有一个有效的端口整数值,065535 
ServerSocket(int port,int backlog):backlog用于改变连接队列长度
ServerSocket(int port,int backlog,InetAddress localAddr):在机器存在多个IP地址的情况下,允许通过localAddr参数来指定将ServerSocket绑定到指定的IP地址

当ServerSocket使用完毕后,应当使用close()方法来关闭该ServerSocket
服务器应该不断地接收来自客户端的所有请求,所以Java程序通常会通过循环不断地调用ServerSocket的accept()方法

ServerSocket ss = new ServerSocket(3000);
white(true){
    Socket s = ss.accept();
}
  • 使用Socket进行通信
Socket(InetAddress/String remoteAddress,int port):创建连接到指定远程主机、远程端口的Socket,该构造器没有指定本本地地址、本地端口,默认使用本地主机的默认IP地址,默认使用系统动态分配的端口
Socket(InetAddress/String remoteAddress,int port,InetAddress localAddr,int localPort):适用于本地主机有多个IP地址的情形
服务端例子:
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(3000);
        while(true){
            Socket s = ss.accept();
            PrintStream ps = new PrintStream(s.getOutputStream());
            ps.println("我是服务端!");
            ps.close();
            s.close();
        }
    }
}

客户端例子:

public class Client {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("127.0.0.1",3000);
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = br.readLine();
        System.out.println("来自服务器的数据:"+line);
        br.close();
        socket.close();
    }
}
相关标签: Java 入门教程