第十五章 网络编程
本章内容 使用java.net包中的类在程序中实现网络通信 URL类及其用法 Socket通信
URL URL(Uniform Resource Locator)----统一资源定位器,表示Internet上某一资源的地址。 protocol:resourceName URL举例: http://www.sun.com/ http://home.netscape.com/home/welcome.html http://www.sun.com.cn/developers/
java.net.URL类 常用构造方法 public URL(String spec); URL u1 = new URL(“http://home.netscape.com/home/”); public URL(URL context, String spec); URL u2 = new URL(u1, “welcome.html”); public URL(String protocol, String host, String file); URL u3 = new URL(“http”, “www.sun.com”, “developers/index.html” ); public URL (String protocol, String host, int port, String file); URL u4 = new URL(“http”, “www.sun.com”, 80, “developers/index.html” );
URL类应用举例(1) import java.io.*; import java.net.*; public class URLReader{ public static void main(String args[]){ try{ URL tirc = new URL("http://www.tsinghua.edu.cn/"); BufferedReader in = new BufferedReader(new InputStreamReader(tirc.openStream())); String s; while((s = in.readLine())!=null) System.out.println(s); in.close(); }catch(MalformedURLException e) { System.out.println(e); }catch(IOException e){ }
URL类应用举例(2) 程序URLReader.java输出结果: <html> <head> <title>清华大学网站首页</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta http-equiv="refresh" content="0;URL=./eng/index.htm"> </head> <body bgcolor="#FEFAF2" text="#000000" topmargin=0 leftmargin=0 marginwidth=0 marginheight=0> </body> </html>
Socket 两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个socket。 socket通常用来实现client-server连接。 java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端 建立连接时所需的寻址信息 远程计算机的机器名或IP地址 试图连接的端口号(Port number)
Socket通信模型 Server Client ServerSocket s (port #) Socket (host, port #) (Attempt to connect) s.accept()/等待连接 Socket() OutputStream OutputStream InputStream InputStream socket.close() socket.close()
网络编程的四个基本步骤 创建socket; 打开连接到socket的输入/输出流; 按照一定的协议对socket进行读/写操作;
创建socket Socket/ServerSocket类的构造方法 Socket(InetAddress address, int port); Socket(InetAddress address, int port, boolean stream); Socket(String host, int port); Socket(String host, int port, boolean stream); ServerSocket(int port); ServerSocket(int port, int count);
客户端Socket的建立 try{ Socket socket=new Socket(”127.0.0.1",2000); }catch(IOException e){ System.out.println("Error:"+e); }
服务器端Socket的建立 ServerSocket server=null; try { server=new ServerSocket(2000); }catch(IOException e){ System.out.println("can not listen to :"+e); } Socket socket=null; socket=server.accept(); System.out.println("Error:"+e);
打开输入/出流 PrintStream os=new PrintStream(new BufferedOutputStream(socket.getOutputStream())); DataInputStream is=new DataInputStream(socket.getInputStream()); 关闭Socket os.close(); is.close(); socket.close();
简单的client/server程序 import java.net.*; import java.io.*; public class TestServer { public static void main(String args[]) { ServerSocket s = null; try { s = new ServerSocket(8888); } catch (IOException e) {} while (true) { Socket s1 = s.accept(); OutputStream os = s1.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); dos.writeUTF("Hello,bye-bye!"); dos.close(); s1.close(); }
简单的client/server程序 import java.net.*; import java.io.*; public class TestClient { public static void main(String args[]) { try { Socket s1 = new Socket("127.0.0.1", 8888); InputStream is = s1.getInputStream(); DataInputStream dis = new DataInputStream(is); System.out.println(dis.readUTF()); dis.close(); s1.close(); } catch (ConnectException connExc) { System.err.println("服务器连接失败!"); } catch (IOException e) { }
Ex1 分析并运行M15-14、15页的client/server程序,体会Socket编程原理及其实现机制;