Day24

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

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

客户端:自定义

服务端:Tomcat

 import java.net.*;
import java.io.*;
class MyIE
{
public static void main(String[] args)throws Exception
{
Socket s=new Socket("127.0.0.1",8080);
PrintWriter out=new PrintWriter(s,getOutputStream(),true); out.prinln("GET /myWeb/Demo.html HTTP/1.1");
out.prinln("Accept:*/*");
out.println("Accept-Language:zh-cn");
out.println("Host:127.0.0.1:11000");
out.println("Connection:closed"); out.println();
out.println(); BufferedReader bufr=
new BufferedReader(new InputStreamReader(s.getInputStreamReader));
String line=null;
while((line=bufr.readLine())!=null)
{
System.out.println(line);
}
s.close();
}
}

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

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

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

 import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class MyIEByGUI
{
private Frame f;
private TextField tf;
private Button but;
private TextArea ta; private Dialog d;
private Label lab;
private Button okBut; MyIEByGUI()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout()); tf = new TextField(60); but = new Button("转到"); ta = new TextArea(25,70); d = new Dialog(f,"提示信息-self",true);
d.setBounds(400,200,240,150);
d.setLayout(new FlowLayout());
lab = new Label();
okBut = new Button("确定"); d.add(lab);
d.add(okBut); f.add(tf);
f.add(but);
f.add(ta); myEvent();
f.setVisible(true);
}
private void myEvent()
{ okBut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);
}
});
d.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
d.setVisible(false);
}
}); tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
try
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
showDir();
}
catch (Exception ex)
{
} }
}); but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
showDir();
}
catch (Exception ex)
{
} }
}); f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
} private void showDir()throws Exception
{ ta.setText("");
String url = tf.getText();//http://192.168.1.254:8080/myweb/demo.html int index1 = url.indexOf("//")+2; int index2 = url.indexOf("/",index1); String str = url.substring(index1,index2);
String[] arr = str.split(":");
String host = arr[0];
int port = Integer.parseInt(arr[1]); String path = url.substring(index2);
//ta.setText(str+"...."+path); Socket s = new Socket(host,port); PrintWriter out = new PrintWriter(s.getOutputStream(),true); out.println("GET "+path+" HTTP/1.1");
out.println("Accept: */*");
out.println("Accept-Language: zh-cn");
out.println("Host: 127.0.0.1:11000");
out.println("Connection: closed"); out.println();
out.println(); BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
} s.close(); } public static void main(String[] args)
{
new MyIEByGUI();
}
}

在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)

 import java.net.*;
class URLDemo
{
public static void main(String[] args)throws MalformedURLException
{
URL url=new URL("http://127.0.0.1:8080/myWeb/Demo.html?name=hahaha&name=20"); System.out.println("getFile(): "+url.getFile());
System.out.println("getHost(): "+url.getHost());
System.out.println("getPath(): "+url.getPath());
System.out.println("getPort(): "+url.getPort());
System.out.println("getProtocol(): "+url.getProtocol());
System.out.println("getQuery(): "+url.getQuery());
}
}
/*
String getFile()
获取此 URL 的文件名。
String getHost()
获取此 URL 的主机名(如果适用)。
String getPath()
获取此 URL 的路径部分。
int getPort()
获取此 URL 的端口号。
String getProtocol()
获取此 URL 的协议名称。
String getQuery()
获取此 URL 的查询部分。 运行结果: D:\abc>java URLDemo
getFile(): /myWeb/Demo.html?name=hahaha&name=20
getHost(): 127.0.0.1
getPath(): /myWeb/Demo.html
getPort(): 8080
getProtocol(): http
getQuery(): name=hahaha&name=20 */
 import java.io.*;
import java.net.*;
class URLConnectionDemo
{
public static void main(String[] args) throws Exception
{
URL url=new URL("http://127.0.0.1:8080/myWeb/Demo.html"); URLConnection conn=url.openConnection();
System.out.println(conn); InputStream in=conn.getInputStream();
byte[] buf=new byte[1024];
int len =in.read(buf);
System.out.println(new String(buf,0,len));
}
}

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建立映射关系就可以了。

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

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

    目录 1.多线程运行的安全问题 2.多线程同步代码块 3.同步方法的锁是this 4.静态同步方法的锁是Class对象 5.单例设计模式(面试中的考点) 6.死锁(一个发生死锁的例子) 多线程运行的安 ...

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

    目录: 01 网络编程概述1 02 网络编程概述2 03网络编程 网络模型 04网络编程 IP地址 05网络编程 TCP和UDP 06网络编程 Socket 07网络编程 UDP发送端 01 网络编程 ...

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

    Day 23 08 Udp接收端09 Udp键盘录入数据方式10 Udp聊天11 TCP传输12 TCP传输213 TCP练习14 TCP复制文件 08 Udp接收端 需求:定义一个应用程序,用于接收 ...

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

    Day24 01 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 import java.net ...

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

    Day20 10 创建java文件列表11 Properties简述12 Properties存取13 Properties存取配置文件14 Properties练习15 PrintWriter16 ...

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

    Day20 01 File概述02 File对象功能-创建和删除03 File对象功能-判断04 File对象功能-获取05 File对象功能-文件列表106 File对象功能-文件列表207 列出目 ...

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

    提要 01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通过缓冲区复制文本文件)04 IO流(readLine的原理)05 IO流(MyBuffer ...

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

    Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型 ...

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

    Day14 08 LinkedList09 LinkedList练习10 ArrayList练习11 ArrayList练习2 12 HashSet13 HashSet存储自定义对象14 HashSe ...

随机推荐

  1. CSRF 防御策略

    在业界目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段:在请求地址中添加 token 并验证:在 HTTP 头中自定义属性并验证.下面就分别对这三种策略进行详细介绍. 验证 ...

  2. 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向

    [源码下载] 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向 作者:webabcd 介绍背水一战 Windows 10 之 UI UI 设计概述 启动屏幕(闪屏) 屏 ...

  3. 孙鑫MFC学习笔记1.Windows应用程序运行机理

    1.MSG结构 hwnd:窗口句柄 message:消息类型 wParam & lParam:消息的附加信息(比如键值) time:消息被投递的时间 tip:typedef的作用是从变量类型区 ...

  4. Cursors in MySQL Stored Procedures

    https://www.sitepoint.com/cursors-mysql-stored-procedures/ After my previous article on Stored Proce ...

  5. Spark集群 + Akka + Kafka + Scala 开发(3) : 开发一个Akka + Spark的应用

    前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...

  6. static关键字详解

    首先,要了解一下这些东西的存放位置 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆 ...

  7. Python的sorted函数应用

    sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序 L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88) ...

  8. 初识windows程序需要了解的知识点

    初识一件事物我们会有陌生,我们慢慢地去了解它就会懂,让我带你们一起了解吧. 一.Form是.Net Framework 定义好的一个最基本的窗体类,具有窗体基本属性和方法 属性            ...

  9. Git安装图解

    msysgit是Windows版的Git,提供了命令行操作 下载地址:http://msysgit.github.io/

  10. Draggabilly – 轻松实现拖放功能(Drag & Drop)

    Draggabilly 是一个很小的 JavaScript 库,专注于拖放功能.只需要简单的设置参数就可以在你的网站用添加拖放功能.兼容 IE8+ 浏览器,支持多点触摸.可以灵活绑定事件,支持 Req ...