教材学习内容总结
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) {}
将客户端与服务端链接起来:
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)为(远程)服务器。