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

提交代码截图

代码推送

代码托管

第十一周java学习总结的更多相关文章

  1. 第十一周Java学习总结。

    java UI 图形界面知识梳理: ATM: 在整个AWT包中提供的所有工具类主要分为以下3种. (1)组件:Component. (2)容器:Container. (3)布局管理器:LayoutMa ...

  2. 20145307陈俊达第六周JAVA学习总结

    20145307陈俊达第六周JAVA学习总结 知识点梳理 第十章节 S1 ·若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出串流.在java中,输入串流代表对象为java. ...

  3. 20165236 第六周Java学习总结

    20165236 第六周Java学习总结 一. 第八章内容: 1.String 类: String对象.常量对象:字符串并置: 常用方法: length,equals,startsWith,compa ...

  4. 第五周Java学习总结(补)

    第五周java学习内容(补) 学习内容: File类方法的操作 public String getName() public boolean canRead() public boolean canW ...

  5. 20155237 第十一周java课堂程序

    20155237 第十一周java课堂程序 内容一:后缀表达式 abcde/-f+ 内容二:实现Linux下dc的功能,计算后缀表达式的值 填充下列代码: import java.util.Scann ...

  6. 20165203《Java程序设计》第七周Java学习总结

    20165203<Java程序设计>第七周Java学习总结 教材学习内容总结 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系统,简称MySQL,是世 ...

  7. 20155301第十一周java课栈程序

    20155301第十一周java课栈程序 内容一:后序表达式: abcde/-f+ 内容二:根据填充以下代码: import java.util.Scanner; public class MyDCT ...

  8. 第十周java学习总结

    目录 第十周java学习总结 学习内容 代码上传截图 代码链接 第十周java学习总结 学习内容 第12章 Java多线程机制 主要内容 Java中的线程 Thread类与线程的创建 线程的常用方法 ...

  9. 20175215 2018-2019-2 第十一周java课程学习总结

    第13章 Java网络编程 13.1 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对 ...

随机推荐

  1. python_操作MySQL 初解

    单文件操作数据库 import random import threading, multiprocessing import time, datetime import pymysql import ...

  2. Hdu 4738【tanjan求无向图的桥】割边判定定理 dfn[x] < low[y]

    题目: 曹操在长江上建立了一些点,点之间有一些边连着.如果这些点构成的无向图变成了连通图,那么曹操就无敌了.刘备为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥.但是诸葛亮把所有炸弹都带走了,只留下 ...

  3. npm命令的使用

    本人实际项目开发前端用的是单页vue组件开发.不管是启动项目还是下载依赖,都要使用npm命令. 东凑凑,西拼拼,整理些常用的. 前提:需要下载node.js.这里就不详细说明了.具体参照官方文档. 1 ...

  4. kibana报[FORBIDDEN/12/index read-only / allow delete (api)]错误

    一.错误描述 1.在kibana,dev中pose数据,报[FORBIDDEN/12/index read-only / allow delete (api)]错误. 尝试过网上的说的方法一:在kib ...

  5. php实用小技巧【持续更新】

    这是本人开始做项目的时候遇到过的问题还有解决方法 1.eval函数 能把字符串转换成可执行的php代码,如果字符串不是可执行的php代码的话,需要在前面加上@,屏蔽notice 2.array_mer ...

  6. softmax+交叉熵

    1 softmax函数 softmax函数的定义为 $$softmax(x)=\frac{e^{x_i}}{\sum_j e^{x_j}} \tag{1}$$ softmax函数的特点有 函数值在[0 ...

  7. 一、H5(移动端)前端使用input type=file 上传图片,调用相机和相册

    一.H5(移动端)前端使用input type=file 上传图片,调用相机和相册

  8. RHEL6本地YUM源配置

    1.挂载本地光盘到系统   1)通过光驱将系统盘挂载到某个目录 [root@cluster01 ~]# mkdir   /mnt/cdrom [root@cluster01 ~]# mount -t ...

  9. PAT Basic 1038 统计同成绩学生 (20 分)

    本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 1 的正整数 N,即学生总人数.随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔.最 ...

  10. 关于form表单回车自动刷新

    现象: form表单,输入框聚焦后,回车,页面刷新跳转. 原因: form表单,在只有一个输入框的时候,在点击回车时,就会触发表单的提交,而form若没有url,则提交后就会刷新页面,导致跳转. 解决 ...