第十一周java学习总结

第13章 Java网络编程

主要内容

URL类

InetAdress类

套接字

UDP数据报

广播数据报

Java远程调用(RMI)

重点和难点

重点: URL的使用和套接字连接机制

难点:套接字连接机制

  • 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,String file) 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类的基本使用

 */

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

  • 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服务器

 * 功能:将客户端发送的内容反馈给客户端

 */

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是一种分布式技术。

提交代码截图

代码推送

代码托管

最新文章

  1. asp.net中membership使用oracle数据库(一)
  2. Java 第8章 循环结构进阶
  3. 电脑自动访问g.ceipmsn.com
  4. T60上安装Gentoo笔记
  5. svn down代码的时候提示“由于目标计算机积极拒绝,无法连接”
  6. js toggle事件
  7. pureMVC学习之一
  8. php数组去重实例及分析
  9. Hadoop: the definitive guide 第三版 拾遗 第十二章 之Hive初步
  10. tmux 配置
  11. 如果不能显示真正的考验个别车型toast问题解决
  12. PHP测试题讲解(20161027)
  13. apache代理转发
  14. Collection articles on stackoverflow
  15. IDEA之插件篇
  16. 创建新的Cocos2dx 3.0项目并解决一些编译问题
  17. Hadoop2.2.0安装配置手册
  18. Winform判断是否已启动
  19. [gist]Android SHA-1
  20. linux上面安装svn步骤

热门文章

  1. mycat 笔记
  2. git常用命令之log
  3. export ,export default 和 import 区别以及用法
  4. 383-基于kintex UltraScale XCKU040的双路QSFP+光纤PCIe 卡
  5. 【HDU1011】Starship Troopers
  6. eclipse修改代码后都需要clean的解决办法
  7. Vue3.0 Function API---------引用
  8. python图片转字符画(转)
  9. SQL基础-order by
  10. 苹果cms如何添加播放器预加载和缓冲广告