网络编程

基本类

InetAddress

此类表示互联网协议(IP)地址。IP地址是IP使用32或128位无符号数字,它是一种低级协议,UDP和TCP协议都是在它的基础上构建的

IPv4:32位,分4段,0~255之间的十进制表示
如:127.0.0.1

IPv6:128位,分8段,0000~FFFF的十六进制数值,冒号分割
如:1080:0:0:98:0:0:205C:408A

常用方法:

  • public static InetAddress getByName(String host):返回指定主机名地址IP对象
  • public static InetAddress getLocalHost():返回本地主机IP对象
  • public byte[] getAddress():返回此InetAddress对象的原始IP地址
  • public boolean isReachable(int timeout):测试时候可以在指定时间内达到该地址
public static void main(String[] args){
    InetAddress locAdd = InetAddress.getLocalHost();
    InetAddress remAdd = InetAddress.getByName("www.taobao.com");

    byte[] ip = {(byte) 112,9,9,8};
    InetAddress remAdd2 = InetAddress.getByAddress(ip);
    System.out.println("本机IP= " + locAdd.getHostAddress());
    System.out.println("淘宝IP= " + remAdd.getHostAddress());
    System.out.println("是否可以送达 " + remAdd2.isReachable(3000));
    /*
        本机IP= 192.168.1.101
        淘宝IP= 163.177.20.223
        是否可以送达 false
    */
}

URL

统一资源定位符,可以直接使用此类找到互联网上的资源如一张图片,一个网页。

一般由:协议名,资源所在主机,端口,资源名等部分组成,如:https://coding.ee/network_programming.html

构造器:

  • URL(String spec):根据指定的地址实例化URL对象;
  • URL(String protocol, String host, int port, String file):实例化URL,并制定协议,主机,端口,资源文件

常用方法:

  • public URLConnection openConnection():得到URLConnection对象
  • public final InputStream openSteam():得到输入流
public static void main(String[] args){
    //http://sports.qq.com/a/20170924/001862.htm
    URL url = new URL("http", "sports.qq.com", 80, "/a/20170924/001862.htm");
    InputSteam is = url.openSteam();
    Scanner sc = new Scanner(is);
    sc.useDelimiter("\r\n");
    while(sc.hasNext()){
        System.out.println(sc.nextline());
    }
}

URLConnection

URLConnection是封装访问远程网络资源的类,通过它可以建立与远程服务器的连接,检查远程资源的一些属性。

常用方法:

  • public int getContentLength():获取内容长度
  • public String getContentType():获得内容类型
  • public InputStream getInputStream():获得连接的输入流
  • public void setRequestProperty(String key, String value):设置一般请求属性
  • public String getHeaderField(String name):返回指定的头字段的值
public static void main(String[] args){
    //http://sports.qq.com/a/20170924/001862.htm
    URL url = new URL("http", "sports.qq.com", 80, "/a/20170924/001862.htm");
    URLConnection uc = url.openConnection();
    System.out.println("内容长度= " + uc.getContentLength());
    System.out.println("内容类型= " + uc.getContentType());
}

URLEncoder和URLDecoder

URLEncoder可以为传递的内容编码,而URLDecoder可以为传递的内容解码

  • public static String encode(String s, String enc):使用指定的编码机制将字符串转码成application/x-www-form-urlencoded MIME字符串;
  • public static String decode(String s,String enc):使用指定编码机制对application/x-www-form-urlencoded MIME字符串解码

网络通信

TCP

TCP表示传输控制协议,是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(通信)协议。在Socket程序开发中,服务器端使用ServerSocket等客户端的连接,在Java的网络程序中,每一个客户端都使用Socket对象表示。

第一次握手:建立连接时,客户端发送SYN包到服务器,并进入发送状态,等待服务器确认。

第二次握手:服务器确认收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN + ACK包,此时服务器进入接收状态。

第三次握手:客户端接收到服务器的SYN + ACK 包,向服务器发送确认包ACK,此包发送完毕,客户端和服务端已经建立连接,完成三次握手。

ServerSocket:TCP的服务端类,用于接收客户端的连接请求和响应客户端

构造器:public ServerSocket(int port) throws Exception:创建ServerSocket对象,并监听指定的端口

常见方法:

  • public Soecket accept() throws IOException:等待客户端连接,该方法连接之前一直处于阻塞状态
  • public InetAddress getInetAddress():返回此服务端的IP对象
  • publc void close():关闭ServerSocket对象

Socket:表示每一个客户端连接对象

构造器:Socket(String host, int port):根据服务端的主机名和端口创建Socket对象

常见方法:

  • public InputStream getInputStream():返回输入流对象
  • public OutPutSteam getOutputStream():返回输出流对象
  • public void close():关闭Socket对象

UDP

表示用户数据报协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP开发中使用DatagramPacket包装一条要发送的信息,之后使用DatagramSocket完成发送操作

DatagramPacket类:

构造器:

  • DatagramPackage(byte[] buf, int length):创建用来接收长度为length的数据包对象:
  • DatagramPackage(byte[] buf, int length, InetAddress address, int port):根据发送数据,数据长度,目标地址和目标端口创建数据包对象

常用方法:

  • public byte[] getData():返回用来接收或发送数据的缓冲区
  • public int getLength():返回将要发送或接收到的数据的长度

DatagramSocket类:

构造器:DatagramSocket(int port):创建DatagramSocket对象,并指定监听端口

常用方法:

  • public send(DatagramPacket p):发送数据报
  • public receive(DatagramPackage p):接收数据报
  • public void close():关闭网络连接

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注