Java网络编程

1. 网络基础知识

计算机网络:把分布在不同地理区域的计算机和专门的外部设备用通信线路互连成一个规模大,功能强的网络系统,从而使众多的计算机能互相传递消息,共享资源。

1)IP地址和端口号

  1. IP地址用于唯一标识网络中的一个通信实体,这个通信实体可以是一台主机,也可以是一台打印机,或者是路由器的某一个端口号。
  2. 端口是一个16位的整数,用于表示数据交给哪个应用程序处理,范围0到65535

2. Java的网络支持

1)InetAddress表示IP地址,没有构造函数,通过静态方法获取实例

  • getByName(String host) : 通过主机名来获取InetAddress对象
  • getByAddress(byte[] addr) :通过原始IP地址获取InetAddress对象

实例对象的方法

  • getHostAddress() : 获取此InetAddress实例对应的IP地址字符串
  • getHostName() : 获取IP地址的主机名
  • getLoaclHost() : 获取本地IP地址(静态方法)
InetAddress ip = InetAddress.getByName("www.baidu.com");
System.out.println("是否可达:" + ip.isReachable(2000));
System.out.println(ip.getHostAddress());
System.out.println(ip.getHostName());

InetAddress local = InetAddress.getByAddress(new byte[]{127, 0, 0, 1});
System.out.println(local.isReachable(2000));
System.out.println(local.getHostName());
System.out.println(local.getHostAddress());
                    System.out.println(InetAddress.getLocalHost().getHostAddress());

2) URLDecoder 和 URLEncoder

URLDecoder 和 URLEncoder 用于普通字符串和MIME字符串之间的转换

String encodeStringName = URLEncoder.encode("姓名", "utf-8");
System.out.println(encodeStringName);
String encodeStringAge = URLEncoder.encode("年龄", "gbk");
System.out.println(encodeStringAge);

System.out.println(URLDecoder.decode(encodeStringName, "utf-8"));
System.out.println(URLDecoder.decode(encodeStringAge, "gbk"));

3)URL , URLConnection, URLPermission

URL(Uniform Resource Locator)表示统一资源定位符,它是指向互联网“资源”的指针。URL由协议名,主机,端口号,资源组成,形式如下:
protocol://host:post/resourceName
获取到URL对象后,可以通过方法来获取URL对应的资源

  • String getFile() : 获取该URL的资源名
  • String getHost() : 获取该URL的主机名
  • String getPath() : 获取该URL的路径部分
  • int getPort() : 获取该URL的端口号
  • String getQuery() : 获取该URL的查询字符串部分
  • URLConnection openConnection() : 返回一个URLConnenction对象,它代表与URL所引用的远程对象的连接
  • InputStream openStream() : 打开与此URL的连接,返回一个用于读取该URL资源的InputStream

3 基于TCP协议的网络编程

Java对基于TCP协议的网络通信提供了良好的封装,Java使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信
Java网络编程_第1张图片
1. ServerSocket 对象用于监听来自客户端的Socket连接请求,如果没有连接,它将一直处于等待状态。
2. 使用Socket进行通信,指定IP地址和端口号,并通过输入/输出流来获取信息
3. 基于NIO实现非阻塞Socket通信
Java网络编程_第2张图片

  • 基于AIO实现的非阻塞通信,AsynchronousServerSocketChannel, AsynchronousSocketChannel
//遍历的时候删除集合里的元素
Set<CheckWork> set =  this.getUserDao().getAll().get(0).getActionCheckWorks(); 
Iterator<CheckWork> it = set.iterator(); 
while(it.hasNext()){  
    CheckWork checkWork = it.next(); 
    if(checkWork.getState()==1){  
        it.remove(); 
    }  
}  

4. 基于UDP协议的网络编程

  1. DatagramSocket对象作为基于UDP协议的Socket, 使用DatagramPacket代表DatagramSocket发送和接受的数据报
  2. 使用MulticastSocket实现多点广播
    Java网络编程_第3张图片

你可能感兴趣的:(Java网络编程)