201711671105 《Java程序设计》第十三章学习总结

教材学习内容总结

1、URL类

构造方法:

public URL (String spec) throws MalformedURLException
try { URL url = new URL("http://www.google.com");
}
catch (MalformedURLException e) {
System.out.println ("Bad URL:" +url);
}

另一个方法:
public URL (String protocol,String host,String file) throws MalformedURLException

2、InetAddress类

包含主机地址的域名与IP地址

获取方法:

getByName(String s)

实例方法:

public String getHostName()  //获取InetAddress 对象所含的域名

public String getHostAddress()  //获取InetAddress 对象所含的IP地址

3、套接字

3.1客户端套接字

使用Socket 类建立负责链接到服务器的套接字对象

构造方法:

Socket(String host,int port)
try { Socket clientSocket = new Socket ("http://192.168.0.78",2010);
}
catch (IOExeception e) {}

3.2 SeverSocket对象与服务器端套接字

构造方法:

SeverSocket(int port)
try { SeverSocket severForClient = new SeverSocket (2010);
}
catch (IOExeception e) {}

将客户端与服务端链接起来:

扫描二维码关注公众号,回复: 4440450 查看本文章
try { Socket sc = severForClient.accept();
}
catch (IOExeception e) {}

3.3多线程技术

套接字通信的两个基本原则:

1)服务器应当启动一个专门的线程,在该线程中和客户的套接字建立链接;

2)由于套接字的输入流在读取信息时可能发生阻塞,客户端和服务器都需要在一个单独的线程中读取信息。

例:

Client.java
import java.io.*;
import java.net.*;
import java.util.*;
public class Client  {
   public static void main(String args[]) {
      Scanner scanner = new Scanner(System.in);
      Socket mysocket=null;
      DataInputStream in=null;
      DataOutputStream out=null;
      Thread readData ; 
      Read read=null;
      try{  mysocket=new Socket();
            read = new Read();
            readData = new Thread(read);
            System.out.print("输入服务器的IP:");
            String IP = scanner.nextLine();
            System.out.print("输入端口号:");
            int port = scanner.nextInt();
            if(mysocket.isConnected()){}
            else{
              InetAddress  address=InetAddress.getByName(IP);
              InetSocketAddress socketAddress=new InetSocketAddress(address,port);
              mysocket.connect(socketAddress); 
              in =new DataInputStream(mysocket.getInputStream());
              out = new DataOutputStream(mysocket.getOutputStream());
              read.setDataInputStream(in);
              readData.start();
            }
       }
       catch(Exception e) {
            System.out.println("服务器已断开"+e);
       }
       System.out.print("输入园的半径(放弃请输入N):");
       while(scanner.hasNext()) {
           double radius=0; 
           try {
               radius = scanner.nextDouble();
           }
           catch(InputMismatchException exp){
              System.exit(0);
           }   
           try { 
               out.writeDouble(radius);
           }
           catch(Exception e) {}
       } 
   }
}
Read.java
import java.io.*;
public class Read implements Runnable {
   DataInputStream in;
   public void setDataInputStream(DataInputStream in) {
      this.in = in;
   }
   public void run() {
      double result=0;
      while(true) {
        try{ result=in.readDouble();
             System.out.println("圆的面积:"+result);
             System.out.print("输入园的半径(放弃请输入N):");
        }
        catch(IOException e) { 
             System.out.println("与服务器已断开"+e);
             break;
        }   
      }
   }
}
Sever.java
import java.io.*;
public class Read implements Runnable {
   DataInputStream in;
   public void setDataInputStream(DataInputStream in) {
      this.in = in;
   }
   public void run() {
      double result=0;
      while(true) {
        try{ result=in.readDouble();
             System.out.println("圆的面积:"+result);
             System.out.print("输入园的半径(放弃请输入N):");
        }
        catch(IOException e) { 
             System.out.println("与服务器已断开"+e);
             break;
        }   
      }
   }
}

4、UDP数据报

基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证。 基于UDP通信的基本模式是:

将数据打包,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地。

接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容。

4.1发送:

用DatagramPacket类将数据打包,用DatagramSocket类的不带参数的构造方法:DatagramSocket()创建一个对象,该对象负责发送数据包。

性质:

含有data数组指定的数据

该数据包将发送到地址是address,端口号是post的主机上

称address是这个数据包的目标地址,post是它的目标端口

4.2接收

用DatagramSocket的另一个构造方法DatagramSocket(int port) 创建一个对象,其中的参数必须和待接收的数据包的端口号相同 ,然后对象mail_in使用方法receive(DatagramPacket pack)接受数据包。

5、广播数据报

广播数据报是一种较新的技术,要广播或接收广播的主机都必须加入到同一个D类地址。

6、Java远程调用

Java远程调用,RMI(Remote Method Invocation)是一种分布式技术,使用RMI可以让一个虚拟机(JVM)上的应用程序请求调用位于网络上另一处的JVM上的对象方法。习惯上称发出调用请求的虚拟机(JVM)为(本地)客户机,称接受并执行请求的虚拟机(JVM)为(远程)服务器。
 

猜你喜欢

转载自blog.csdn.net/zhifengdeng/article/details/84900315