zoukankan      html  css  js  c++  java
  • Java基础之网络编程

    IP地址

    IP地址是由32位或者128位无符号数表示的网络层通信地址,是一种低级协议,TCP和UDP协议都是在它的基础上构建的。Java中使用InetAddress来表示IP地址,它有两个子类Inet4Address和Inet6Address,分别表示IPV4和IPV6。

    getByName()方法通过主机名获取到InetAddress对象,若有多个主机,则使用getAllByName()返回InetAddress对象数组。

    Socket套接字

    Socket是提供网络服务的一种机制,通信的两端都有socket,两端通过socket进行通信。InetSocketAddress封装了IP+端口号。

    TCP/UDP协议的特点

    UDP协议

    UDP协议将数据封装成数据报,大小在64KB以内,无须建立连接,速度快,不可靠。Java使用DatagramSocket类描述用来发送和接收数据包的socket,而使用DatagramPacket来描述UDP协议的数据包,用于描述无连接包投递服务。

    数据发送

    • 建立UDPsocket服务,指定发送端口: DatagramSocket ds=new DatagramSocket(localport);
    • 将字节数据封装在数据包中:DatagramPacket dp=new DatagramPacket(buf,buf.length,ia,receiveport)
    • 通过socket发送功能发送: ds.send(dp)
    • 关闭资源:ds.close()

    数据接收

    1. 建立UDPsocket服务,指定监听端口:DatagramSocket ds=new DatagramSocket(receiveport);
    2. 定义数据包用来接收数据:DatagramPacket dp=new DatagramPacket(buf,buf.length)
    3. 通过socket接收功能接收数据并提取:ds.receive(dp);dp.getData();
    4. 关闭资源:ds.close()

    TCP协议

    TCP协议需要建立连接,在连接中传输大量数据(不需封装成数据报),通过三次握手完成连接,是可靠协议,但效率低。Java使用Socket来描述客户端的socket服务,使用SocketSever来描述服务器端的socket服务。

    客户端

    1. 创建客户端并指定要连接的服务器的IP和端口:Socket cs=new Socket(InetAdress,serverport)
    2. 通过socket对象中的输入流和输出流分别发送和接收数据:
    3. 获取到输出流OutputStream os=cs.getOutputStream();
    4. 将数据写入到输出流中:os.write(byte[]);
    5. 获取到输入流:InputStream is=cs.getInputstream()

    服务器端

    1. 创建服务端的ServerSocket服务,并监听一个端口:SeverSocket ss=new ServerSocket(serverport)
    2. 获取连接过来的客户端对象:Socket s=ss.accept();该方法是阻塞式方法。
    3. 使用客户端对象的读取流来读取发送过来的数据:
    4. 获取到输入流InputStream is=s.getInputstream()
    5. 将数据读取到字节数组中Is.read(buf)
    6. 获取到输出流:OutputStream os=s.getOutputStream();
    7. 通信完毕关闭客户端s.close()

    ServerSocket对象初始化时,可以通过设置backlog参数来指定能最大连接到服务器的客户端个数

    URL类

    URL是统一资源定位符,该类可以根据指定形式构建URL对象。

    • getHost()获取主机名
    • getFile()获取文件名
    • getPath()获取路径部分
    • getPort()获取端口号,当URL中没有指定时返回-1;
    • getProtocal()获取协议名
    • getQuery()获取请求部分
    • openConnection()返回一个URL的连接对象
    • openStream()打开一个URL连接并返回一个用于从该连接读入的InputStream

    URLConnection类

    该类是抽象类,有两个子类HttpURLConnection和JarURLConnection来实现。该类封装了传输层的socket对象,可以直接读取socket流对象

    • getInputStream()返回socket的读取流对象,用于数据的读取从该连接返回的数据。
    • getContent()获取到URL连接的内容
  • 相关阅读:
    [leetCode]127. 单词接龙
    [leetCode]450. 删除二叉搜索树中的节点
    [leetCode]701. 二叉搜索树中的插入操作
    [leetCode]235. 二叉搜索树的最近公共祖先
    [leetCode]501. 二叉搜索树中的众数
    $Abstract^2 Interpretation$
    图说 Python 内存管理
    Python 解释器初探
    幸福之路
    Spark编程基础
  • 原文地址:https://www.cnblogs.com/cqumonk/p/4008355.html
Copyright © 2011-2022 走看看