第13章 Java网络编程
主要内容
URL类
InetAdress类
套接字
UDP数据报
广播数据报
Java远程调用(RMI)
重点和难点
重点: URL的使用和套接字连接机制
难点:套接字连接机制
java.net
包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator)
,使用URL创建对象的应用程序称作客户端程序。public URL(String spec) throws MalformedURLException
public URL(String protocol, String host,String file) throws MalformedURLException
读取URL中的资源
URL对象调用
InputStream openStream()
方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源读入到客户端。
package inetaddressdemo;
import java.net.*;
/**
?*?演示InetAddress类的基本使用
?*/
public class InetAddressDemo {
???????? public static void main(String[] args) {
?????????????????? try{
??????????????????????????? //使用域名创建对象
??????????????????????????? InetAddress inet1 = InetAddress.getByName("www.163.com");
??????????????????????????? System.out.println(inet1);
??????????????????????????? //使用IP创建对象
??????????????????????????? InetAddress inet2 = InetAddress.getByName("127.0.0.1");
??????????????????????????? System.out.println(inet2);
??????????????????????????? //获得本机地址对象
??????????????????????????? InetAddress inet3 = InetAddress.getLocalHost();
??????????????????????????? System.out.println(inet3);
??????????????????????????? //获得对象中存储的域名
??????????????????????????? String host = inet3.getHostName();
??????????????????????????? System.out.println("域名:" + host);
??????????????????????????? //获得对象中存储的IP
??????????????????????????? String ip = inet3.getHostAddress();
??????????????????????????? System.out.println("IP:" + ip);
?????????????????? }catch(Exception e){}
???????? }
}
获取地址
获取Internet上主机的地址
可以使用InetAddress类
的静态方法getByName(String s);
获得一个InetAddress对象,该对象含有主机地址的域名和IP地址,该对象用如下格式表示它包含的信息:
www.sina.com.cn/202.108.37.40
获取本地机的地址
我们可以使用InetAddress
类的静态方法getLocalHost()
获得一个InetAddress对象,该对象含有本地机的域名和IP地址。
3.套接字
IP地址标识Internet上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号被规定为一个16位的0~65535之间的整数。
当两个程序需要通信时,它们可以通过使用Socket类建立套接字对象并连接在一起(端口号与IP地址的组合得出一个网络套接字)。
try{ Socket mysocket=new Socket(“http://192.168.0.78”,1880);
}
catch(IOException e)
{ }
与mysocket相关的方法
getInputStream()获得一个输入流
getOutputStream()获得一个输出流
用getInputStream()得到的输入流接到另一个DataInputStream数据流上
用getOutputStream()得到的输出流接到另一个DataOutputStream数据流上
5.UDP数据报
基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证。
基于UDP通信的基本模式是:
将数据打包,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地。
接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容。
DatagramSocket mail_out=new DatagramSocket();
mail_out.send(data_pack);
Remote
接口??? package tcp;
import java.io.*;
import java.net.*;
/**
?* echo服务器
?*?功能:将客户端发送的内容反馈给客户端
?*/
public class SimpleSocketServer {
???????? public static void main(String[] args) {
?????????????????? ServerSocket serverSocket = null;
?????????????????? Socket socket = null;
?????????????????? OutputStream os = null;
?????????????????? InputStream is = null;
?????????????????? //监听端口号
?????????????????? int port = 10000;
?????????????????? try {
??????????????????????????? //建立连接
??????????????????????????? serverSocket = new ServerSocket(port);
??????????????????????????? //获得连接
??????????????????????????? socket = serverSocket.accept();
??????????????????????????? //接收客户端发送内容
??????????????????????????? is = socket.getInputStream();
??????????????????????????? byte[] b = new byte[1024];
??????????????????????????? int n = is.read(b);
??????????????????????????? //输出
??????????????????????????? System.out.println("客户端发送内容为:" + new String(b,0,n));
??????????????????????????? //向客户端发送反馈内容
??????????????????????????? os = socket.getOutputStream();
??????????????????????????? os.write(b, 0, n);
?????????????????? } catch (Exception e) {
??????????????????????????? e.printStackTrace();
?????????????????? }finally{
??????????????????????????? try{
???????????????????????????????????? //关闭流和连接
???????????????????????????????????? os.close();
???????????????????????????????????? is.close();
???????????????????????????????????? socket.close();
???????????????????????????????????? serverSocket.close();
??????????????????????????? }catch(Exception e){}
?????????????????? }
???????? }
}
理解 URL类是对统一资源定位符的抽象,使用URL创建对象的应用程序称作客户端程序。
网络套接字是基于TCP协议的有连接通信,套接字连接就是客户端的套接字对象和服务器端的套接字对象通过输入、输出流连接在一起。
基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证。
设计广播数据报网络程序时,必须将要广播或接收广播的主机加入到同一个D类地址。D类地址也称作个组播地址。
RMI是一种分布式技术,使用RMI可以让一个虚拟机(JVM)上的应用程序请求调用位于网络上另一处的JVM上的对象方法RMI是一种分布式技术。
原文:https://www.cnblogs.com/ldc175206/p/10848407.html