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连接的内容

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。