生活就像海洋,只有意志坚强的人,才能到达彼岸!Young guys,撸起袖子加油干! ------ 博客首页

《Java程序设计》第十一周学习总结

第十一周java学习总结

学习内容

13章 Java网络编程
主要内容
URL类
InetAdress类
套接字
UDP数据报
广播数据报
Java远程调用(RMI)

·        1.URL类
URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对象的应用程序称作客户端程序。
一个URL对象通常包含最基本的三部分信息:协议、地址、资源。
URL的构造方法
URL类通常使用如下的构造方法创建一个URL对象:

public URL(String spec) throws MalformedURLException 
public URL(String protocol, String host,Stringfile) throws MalformedURLException 

读取URL中的资源
URL对象调用
InputStream openStream()
方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源读入到客户端。

· 2.InetAdress类
地址的表示
Internet上的主机有两种方式表示地址:
域名
例如 www.tsinghua.edu.cn
IP地址
例如 202.108.35.210
java.net包中的InetAddress类对象含有一个Internet主机地址的域名和IP地址,例如 www.sina.com.cn/202.108.37.40 。

 package inetaddressdemo;
 import java.net.*;
/** 
 * 演示InetAddress类的基本使用

 */
publicclassInetAddressDemo {
 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地址的组合得出一个网络套接字)。

·   4.客户端套接字
客户端的程序使用Socket类建立负责连接到服务器的套接字对象。
建立连接到服务器的套接字对象:

  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通信的基本模式是:
将数据打包,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地。
接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容。

·  6发送数据包
DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据包。用DatagramPacket的以下两个构造方法创建待发送的数据包:
DatagramPacket(byte data[],int length,InetAddtress address,int port)
DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
DatagramSocket类的不带参数的构造方法:DatagramSocket()创建一个对象,该对象负责发送数据包。例如:

DatagramSocket  mail_out=new DatagramSocket();
mail_out.send(data_pack); 

·  7.RMI的设计细节
扩展Remote接口
定义一个接口是java.rmi包中Remote的子接口,即扩展Remote接口。
RemoteSubject.java
Java远程调用,RMI(Remote Method Invocation)是一种分布式技术,使用RMI可以让一个虚拟机(JVM)上的应用程序请求调用位于网络上另一处的JVM上的对象方法。习惯上称发出调用请求的虚拟机(JVM)为(本地)客户机,称接受并执行请求的虚拟机(JVM)为(远程)服务器。
远程对象
创建远程对象的类必须要实现Remote接口,RMI使用Remote接口来标识远程对象,但是Remote中没有方法,因此创建远程对象的类需要实现Remote接口的一个子接口。RemoteConcreteSubject.java
存根(Stub)与代理:RMI使用rmic命令生成存根
RemoteConcreteSubject_Stub.class
启动注册rmiregistry: 执行rimregistry命令
启动远程对象服务:远程服务器使用java.rmi包中的Naming类调用其类方法rebind(String name, Remote obj)绑定一个远程对象到rmiregistry所管理的注册表中,该方法的name参数是URL格式,obj参数是远程对象,将来客户端的代理会通过name 找到远程对象obj。 BindRemoteObject.java
运行客户端程序:远程服务器启动远程对象服务后,客户端就可以运行有关程序,访问使用远程对象。 ClientApplication.java

·  8.echo服务器

    package tcp;
import java.io.*;
import java.net.*;
/**
 * echo服务器
 * 功能:将客户端发送的内容反馈给客户端
 */
publicclassSimpleSocketServer {

     public static void main(String[] args) {
 ServerSocket serverSocket = null;
  Socket socket = null;
   OutputStream os = null;
nputStream is = null;
//监听端口号
int port = 10000;
  try {
//建立连接
  serverSocket = new ServerSocket(port);
 //获得连接
  socket = serverSocket.accept();
   //接收客户端发送内容
is = socket.getInputStream();
byte[] b = newbyte[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){}
                   }
         }
 }
提交代码截图:

 

码云代码链接:

https://gitee.com/Reveal/qwe/tree/master/qwe/qwe/src

 

posted @ 2019-05-12 12:01  20175335  阅读(146)  评论(0编辑  收藏  举报