网络编程4--毕向东java基础教程视频学习笔记

Day24

06 自定义浏览器-Tomcat服务端
07 自定义图形界面浏览器-Tomcat服务端
08 URL-URLConnection
09 小知识点
10 域名解析

06 自定义浏览器-Tomcat服务端

客户端:自定义

服务端:Tomcat

 1 import java.net.*;
 2 import java.io.*;
 3 class  MyIE
 4 {
 5     public static void main(String[] args)throws Exception
 6     {
 7         Socket s=new Socket("127.0.0.1",8080);
 8         PrintWriter out=new PrintWriter(s,getOutputStream(),true);
 9
10         out.prinln("GET /myWeb/Demo.html HTTP/1.1");
11         out.prinln("Accept:*/*");
12         out.println("Accept-Language:zh-cn");
13         out.println("Host:127.0.0.1:11000");
14         out.println("Connection:closed");
15
16         out.println();
17         out.println();
18
19         BufferedReader bufr=
20             new BufferedReader(new InputStreamReader(s.getInputStreamReader));
21         String line=null;
22         while((line=bufr.readLine())!=null)
23         {
24             System.out.println(line);
25         }
26         s.close();
27     }
28 }

在Tomcat服务端开启的情况下,运行此程序控制台便能显示服务端发给客户端的信息。

07 自定义图形界面浏览器-Tomcat服务端

实现图形化界面的浏览器代码如下,程序的关键是对输入的网址进行分割,获得ip地址,端口号和访问路径。

  1 import java.awt.*;
  2 import java.awt.event.*;
  3 import java.io.*;
  4 import java.net.*;
  5 class  MyIEByGUI
  6 {
  7     private Frame f;
  8     private TextField tf;
  9     private Button but;
 10     private TextArea ta;
 11
 12     private Dialog d;
 13     private Label lab;
 14     private Button okBut;
 15
 16
 17     MyIEByGUI()
 18     {
 19         init();
 20     }
 21     public void init()
 22     {
 23         f = new Frame("my window");
 24         f.setBounds(300,100,600,500);
 25         f.setLayout(new FlowLayout());
 26
 27         tf = new TextField(60);
 28
 29         but = new Button("转到");
 30
 31         ta = new TextArea(25,70);
 32
 33
 34         d = new Dialog(f,"提示信息-self",true);
 35         d.setBounds(400,200,240,150);
 36         d.setLayout(new FlowLayout());
 37         lab = new Label();
 38         okBut = new Button("确定");
 39
 40         d.add(lab);
 41         d.add(okBut);
 42
 43
 44
 45         f.add(tf);
 46         f.add(but);
 47         f.add(ta);
 48
 49
 50         myEvent();
 51         f.setVisible(true);
 52     }
 53     private void  myEvent()
 54     {
 55
 56         okBut.addActionListener(new ActionListener()
 57         {
 58             public void actionPerformed(ActionEvent e)
 59             {
 60                 d.setVisible(false);
 61             }
 62         });
 63         d.addWindowListener(new WindowAdapter()
 64         {
 65             public void windowClosing(WindowEvent e)
 66             {
 67                 d.setVisible(false);
 68             }
 69         });
 70
 71         tf.addKeyListener(new KeyAdapter()
 72         {
 73             public void keyPressed(KeyEvent e)
 74             {
 75                 try
 76                 {
 77                         if(e.getKeyCode()==KeyEvent.VK_ENTER)
 78                     showDir();
 79                 }
 80                 catch (Exception ex)
 81                 {
 82                 }
 83
 84             }
 85         });
 86
 87
 88         but.addActionListener(new ActionListener()
 89         {
 90             public void actionPerformed(ActionEvent e)
 91             {
 92                 try
 93                 {
 94                     showDir();
 95                 }
 96                 catch (Exception ex)
 97                 {
 98                 }
 99
100
101             }
102         });
103
104         f.addWindowListener(new WindowAdapter()
105         {
106             public void windowClosing(WindowEvent e)
107             {
108                 System.exit(0);
109             }
110         });
111     }
112
113     private void showDir()throws Exception
114     {
115
116         ta.setText("");
117         String url = tf.getText();//http://192.168.1.254:8080/myweb/demo.html
118
119         int index1 = url.indexOf("//")+2;
120
121         int index2 = url.indexOf("/",index1);
122
123
124
125         String str = url.substring(index1,index2);
126         String[] arr = str.split(":");
127         String host = arr[0];
128         int port = Integer.parseInt(arr[1]);
129
130         String path = url.substring(index2);
131         //ta.setText(str+"...."+path);
132
133
134         Socket s = new Socket(host,port);
135
136         PrintWriter out = new PrintWriter(s.getOutputStream(),true);
137
138         out.println("GET "+path+" HTTP/1.1");
139         out.println("Accept: */*");
140         out.println("Accept-Language: zh-cn");
141         out.println("Host: 127.0.0.1:11000");
142         out.println("Connection: closed");
143
144         out.println();
145         out.println();
146
147         BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));
148
149         String line = null;
150
151         while((line=bufr.readLine())!=null)
152         {
153             ta.append(line+"\r\n");
154         }
155
156         s.close();
157
158     }
159
160     public static void main(String[] args)
161     {
162         new MyIEByGUI();
163     }
164 }

在Tomcat服务端开启的情况下,在窗口上方的输入网址区输入:http://127.0.0.1:8080/myWeb/Demo.html,再按Enter或者转到,运行显示如下:

08 URL-URLConnection

在07中为了获得有用信息,分割字符串很是麻烦。我们可以使用java.net包中的URL类。

URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。

URL 可选择指定一个“端口”,它是用于建立到远程主机 TCP 连接的端口号。

如果未指定该端口号,则使用协议默认的端口。例如,http 协议的默认端口为 80

构造方法:

URL(String spec):

URL(String protocl,String host;int port,String file)

 1 import java.net.*;
 2 class URLDemo
 3 {
 4     public static void main(String[] args)throws MalformedURLException
 5     {
 6         URL url=new URL("http://127.0.0.1:8080/myWeb/Demo.html?name=hahaha&name=20");
 7
 8         System.out.println("getFile(): "+url.getFile());
 9         System.out.println("getHost(): "+url.getHost());
10         System.out.println("getPath(): "+url.getPath());
11         System.out.println("getPort(): "+url.getPort());
12         System.out.println("getProtocol(): "+url.getProtocol());
13         System.out.println("getQuery(): "+url.getQuery());
14     }
15 }
16 /*
17 String getFile()
18           获取此 URL 的文件名。
19  String getHost()
20           获取此 URL 的主机名(如果适用)。
21  String getPath()
22           获取此 URL 的路径部分。
23  int getPort()
24           获取此 URL 的端口号。
25  String getProtocol()
26           获取此 URL 的协议名称。
27  String getQuery()
28           获取此 URL 的查询部分。
29
30  运行结果:
31
32 D:\abc>java URLDemo
33 getFile(): /myWeb/Demo.html?name=hahaha&name=20
34 getHost(): 127.0.0.1
35 getPath(): /myWeb/Demo.html
36 getPort(): 8080
37 getProtocol(): http
38 getQuery(): name=hahaha&name=20
39
40
41
42 */

 1 import java.io.*;
 2 import java.net.*;
 3 class  URLConnectionDemo
 4 {
 5     public static void main(String[] args) throws Exception
 6     {
 7         URL url=new URL("http://127.0.0.1:8080/myWeb/Demo.html");
 8
 9         URLConnection conn=url.openConnection();
10         System.out.println(conn);
11
12         InputStream in=conn.getInputStream();
13         byte[] buf=new byte[1024];
14         int len =in.read(buf);
15         System.out.println(new String(buf,0,len));
16     }
17 }

09 小知识点

1.Socket类中有一个没有参数的构造方法,这个构造方法一般和connect方法一起使用。

void connect(SocketAddress endpoint)

connect方法的参数类型SocketAddress类是一个抽象类,它的直接子类InetSocketAddress和InetAddress类的区别就是:

InetAddress类中只封装ip地址,而InetSocketAddress封装了ip地址和端口号。

2.ServerSocket类有一个构造方法:ServerSocket(int port,int backlog),

其中backlog代表对连接请求的最大队列长度,即此服务器最多能连接的用户个数。

10 域名解析

1.因为ip地址不容易记忆,上网时常用主机名。

主机名翻译成ip地址,则需要域名解析(DNS)。比如上网时输入www.sina.com.cn,浏览器就先向公网请求DNS服务,

把主机名翻译成相应的ip地址,再把这个地址发回给浏览器。

2.http://127.0.0.1:8080/

http://localhost:8080/

上面这两个地址是等价的,其实127和localhost的映射关系就在本机。

在C:\Windows\System32\drivers\etc路径下的host文件,文件中有:

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

也可以修改文件让127.0.0.1对应别的名字。

上网时,先在本机找映射关系,找不到再用DNS。

可以利用这个特点避免恶意网站的侵扰。在此文件中把一些恶意网站同127.0.0.1建立映射关系就可以了。

时间: 2024-11-06 22:22:53

网络编程4--毕向东java基础教程视频学习笔记的相关文章

多线程--毕向东java基础教程视频学习笔记

多线程运行的安全问题 例子:售票系统 1 class Ticket implements Runnable 2 { 3 //定义静态变量ticket 4 private static int ticket=100; 5 public void run() 6 { 7 while(true) 8 { 9 //判断票编号是否大于0 10 if(ticket>0) 11 { 12 try 13 { 14 Thread.sleep(10); 15 } 16 catch (InterruptedExcep

IO流04--毕向东JAVA基础教程视频学习笔记

Day20 01 File概述02 File对象功能-创建和删除03 File对象功能-判断04 File对象功能-获取05 File对象功能-文件列表106 File对象功能-文件列表207 列出目录下所有内容-递归08 列出目录下所有内容-带层次09 删除带内容的目录 01 File概述 File类用来将文件或者文件夹封装成对象方便对文件与文件夹进行操作File对象可以作为参数传递给流的构造函数了解File类中的常用方法. public static final String separat

IO流05--毕向东JAVA基础教程视频学习笔记

Day20 10 创建java文件列表11 Properties简述12 Properties存取13 Properties存取配置文件14 Properties练习15 PrintWriter16 合并流17 切割文件 10 创建java文件列表 练习:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,建立一个java文件列表的文件. 思路:1.对指定的目录进行递归2.获取递归过程所有的java文件的路径3.将这些路径存储到集合中4.将集合中的数据存储到一个文件中. 1 impo

IO流02--毕向东JAVA基础教程视频学习笔记

提要 08 自定义装饰类09 LineNumberReader10 MyLineNumberReader11 字节流File读写操作12 拷贝图片13 字节流的缓冲区14 自定义字节流的缓冲区-read和write的特点15 读取键盘录入 08 自定义装饰类 1 /*自定义装饰设计类*/ 2 import java.io.*; 3 class MyBufferedReader2 extends Reader 4 { 5 private Reader r; 6 public MyBufferedR

IO流03--毕向东JAVA基础教程视频学习笔记

提要 16 读取转换流17 写入转换流18 流操作规律-119 流操作规律-220 改变标准输入输出设备21 异常的日志信息22 系统信息 16 读取转换流 字符流体系中的InputStreamReader,是字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符. 它使用的字符集可以由名称指定或显示给定,或者可以使用平台默认的字符集. 1 /* 2 通过上一小节15-读取键盘录入中键盘录入一行数据并打印其大写,发现就是读一行数据的原理. 3 也就是readLine方法. 4

集合3--毕向东java基础教程视频学习笔记

Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型方法10 静态方法泛型11 泛型接口12 泛型限定13 泛型限定2 01 TreeSet |--Set   |--HashSet   |--TreeSet 可以对集合中的元素进行排序 1 import java.util.*; 2 class TreeSetTest 3 { 4 public sta

异常处理——毕向东Java基础教程学习笔记

1.异常:就是程序运行过程中出现的不正常情况. 异常的由来:问题本身也是日常生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象. 其实,就是java对不正常情况描述的对象体现. 对于问题的划分:一种是严重性问题,一种是非严重性问题. 对于严重的,java用Error类进行描述. 对于Error类一般不写针对型代码对其进行处理. 对于非严重的,java通过Exception类进行描述. 对于Exception类可以使用针对性处理方式进行处理. 无论Error类还是Excepti

毕向东Java基础教程

人机交互方式: 图形化界面(Graphical User Interface : GUI) 命令行方式(Command Line Interface : CLI)

匿名内部类--毕向东java基础教程学习笔记

1.匿名内部类其实就是内部类的简写形式. 2.定义匿名内部类的前提: 该内部类必须继承一个类,或者实现一个接口. 3.匿名内部类的格式:new 父类名或接口名(){定义子类内容:} 4.其实匿名内部类就是一个匿名子类对象,把定义类和创建对象合成一个步骤了,而且这个对象有点“胖”,也可以理解为带内容的对象. 5.匿名内部类中的方法最好不要超过三个.