10 2 URL 10 2 1 URL 10

  • Slides: 45
Download presentation

10. 2 使用URL定位资源 10. 2. 1 URL的概念 10. 2. 2 URL类的构造函数与方法 10. 2. 3

10. 2 使用URL定位资源 10. 2. 1 URL的概念 10. 2. 2 URL类的构造函数与方法 10. 2. 3 类URLConnection

10. 2. 2 URL类的构造函数与方法 (3)URL(String protocol, String host, int port, String file, URLStream. Handler

10. 2. 2 URL类的构造函数与方法 (3)URL(String protocol, String host, int port, String file, URLStream. Handler handler)。 这种方法比较少用,参数Handler为URL流的句柄, 其他参数同上, (4)URL(String protocol, String host, String file)。 和第二种方法不同的是,该方法使用的是默认的 端口。 (5)URL(URL context, String spec)。 这种方法也不常用,构造函数会先尝试从spec里 分离出协议名。如果spec不包含协议名,而 context为null,就会抛出一个 Malformed. URLException异常。如果两者协议名不 同,context将被忽略。如果spec为null,那么 context的内容将作为所有地址。 (6)URL(URL context, String spec, URLStream. Handler handler)。

10. 2. 2 URL类的构造函数与方法 (5)public final Input. Stream open. Stream() throws IOException。 建立到本URL的连接并返回一个用于从该连 接读取数据而设的流,本方法是

10. 2. 2 URL类的构造函数与方法 (5)public final Input. Stream open. Stream() throws IOException。 建立到本URL的连接并返回一个用于从该连 接读取数据而设的流,本方法是 open. Connection(). get. Input. Stream()的一种 速记。 (6)public boolean same. File(URL other)。 如果本URL和other表示的是同一个资源, 就返回true,否则返回false。

10. 3 Socket通信 10. 3. 1 Socket类的建立 10. 3. 2 Socket类的使用 10. 3. 3

10. 3 Socket通信 10. 3. 1 Socket类的建立 10. 3. 2 Socket类的使用 10. 3. 3 范例:简易Web服务器

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 Datagram. Packet(byte[] buf, int offset, int length),同样是接收数据报,它将位移为

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 Datagram. Packet(byte[] buf, int offset, int length),同样是接收数据报,它将位移为 offset的地方作为起始位置开始赋值。 Datagram. Packet(byte[] buf, int offset, int length, Inet. Address address, int port), offset的意义和上面相同,都是指报文内容 从buf[offset]开始。 还有Datagram. Packet(byte[] buf, int offset, int length, Socket. Address address)和 Datagram. Packet(byte[] buf, int length, Socket. Address address)。

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 从构造函数的参数可以看出,一个数据报文 主要包括IP地址、端口号、数据(data)、数 据长度等,类自带的方法也主要用于得到这 些值或者改变这些值。这些方法包括 get. Address()、get. Data()、get.

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 从构造函数的参数可以看出,一个数据报文 主要包括IP地址、端口号、数据(data)、数 据长度等,类自带的方法也主要用于得到这 些值或者改变这些值。这些方法包括 get. Address()、get. Data()、get. Length()、 get. Port()、set. Data(byte[] buf)、 set. Length(int length)、set. Port(int iport)、 set. Socket. Address(Socket. Address address)等。

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 2. Datagram. Socket的构造方法 Datagram. Socket(),建立一个实例并将其绑定在 任何一个端口上。 Datagram.

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 2. Datagram. Socket的构造方法 Datagram. Socket(),建立一个实例并将其绑定在 任何一个端口上。 Datagram. Socket(int port),将对象绑定在具体的 端口上,用于发送或接收数据报。 Datagram. Socket(int port, Inet. Address laddr),这 种方法不仅绑定了端口,而且绑定了本地地址。 例如以下的代码: Datagram. Socket s 1=new Datagram. Socket(10000, Inet. Address. get. By. Name ("219. 222. 195. 219")); Datagram. Socket(Socket. Address bindaddr), Socket. Address是一个抽象类,通常用它的子类 Inet. Socket. Address来构造。

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 3. Datagram. Socket的其他方法 public void set. Reuse.

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 3. Datagram. Socket的其他方法 public void set. Reuse. Address(boolean on):这个方 法返回Socket地址是否被绑定。默认的情况下, 一个Socket地址处于被绑定状态,除非设 SO_REUSEADDR为true。 public boolean get. Reuse. Address(),返回是否允许 一个Socket被多Datagram. Socket实例绑定。 public void set. So. Timeout(int timeout),throws Socket. Exception设置对超时的限制,当调用 receive()之后开始计时,如果在timeout之内都没 有收到任何信息,就会触发一个 Socket. Timeout. Exception中断,timeout一般要设 为大于0。

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 public int get. So. Timeout() throws Socket.

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 public int get. So. Timeout() throws Socket. Exception, 返回timeout值。 set. Send. Buffer. Size(int size),get. Send. Buffer. Size(), get. Receive. Buffer. Size(),et. Receive. Buffer. Size(int size),这四个函数道理是一样的,就是设置或返 回一个缓冲值的大小。缓冲值的大小等同于数据 报的长度。 public void connect(Inet. Address address, int port), 参数指的是远方的主机,如果建立了连接,那么 会话只在两台机之间进行。断开连接要用 disconnect()。

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 public boolean is. Bound(),返回 Datagram. Socket是否已被绑定。 public

10. 4. 1 Datagram. Packet类和 Datagram. Socket类 public boolean is. Bound(),返回 Datagram. Socket是否已被绑定。 public boolean is. Connected(),返回是否建 立了连接。 public void send(Datagram. Packet p) throws IOException,发送数据报到先前指定的地址。 public void receive(Datagram. Packet p) throws IOException,从远方主机接收一个 数据报,如果没有收到,就一直处于阻塞状 态。如果收到的数据报太长,报文会被截断 (truncated)。

10. 4. 2 数据报的发送与接收实例 下面通过程序来说明两个对象的应用。因为一般不必 建立连接,Datagram. Socket类和Datagram. Packet类 的使用比Socket类要简单很多,通常是构造数据报然 后发送就可以了。下面是发送端的程序清单。 【例程10 -5】数据报的发送UDPSend. java import

10. 4. 2 数据报的发送与接收实例 下面通过程序来说明两个对象的应用。因为一般不必 建立连接,Datagram. Socket类和Datagram. Packet类 的使用比Socket类要简单很多,通常是构造数据报然 后发送就可以了。下面是发送端的程序清单。 【例程10 -5】数据报的发送UDPSend. java import java. net. *; import java. io. *; public class UDPSend{ public UDPSend (){ Datagram. Socket s 1; Datagram. Packet p 1; String str=new String(); //要发送的内容 str="helo 219. 222. 195. 220 n";

10. 4. 2 数据报的发送与接收实例 try{ } //使用 10000端口发送 s 1=new Datagram. Socket(10000); //发送到远方的10002端口 p

10. 4. 2 数据报的发送与接收实例 try{ } //使用 10000端口发送 s 1=new Datagram. Socket(10000); //发送到远方的10002端口 p 1=new Datagram. Packet(str. get. Bytes(), str. length(), Inet. Address. get. By. Name("219. 222. 195. 220"), 10002); //发送 s 1. send(p 1); }catch(Exception e){ e. print. Stack. Trace(); } } public static void main(String args[]){ new UDPSend (); }

10. 4. 2 数据报的发送与接收实例 下面是接收端的程序,与发送端大部分是一样 的: 【例程10 -6】数据报的接收UDPAccept. java import java. net. *; import

10. 4. 2 数据报的发送与接收实例 下面是接收端的程序,与发送端大部分是一样 的: 【例程10 -6】数据报的接收UDPAccept. java import java. net. *; import java. io. *; public class UDPAccept{ public UDPAccept (){ Datagram. Socket s 2; Datagram. Packet p 1;

10. 4. 2 数据报的发送与接收实例 try{ } s 2=new Datagram. Socket(10002); //接收数据报 s 2. receive(p

10. 4. 2 数据报的发送与接收实例 try{ } s 2=new Datagram. Socket(10002); //接收数据报 s 2. receive(p 1); System. out. println(new String(p 1. get. Data())); }catch(Exception e){ e. print. Stack. Trace(); } } public static void main(String args[]){ new UDPAccept (); }