网络编程4--毕向东java基础教程视频学习笔记
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基础教程视频学习笔记的更多相关文章
- 多线程--毕向东java基础教程视频学习笔记
目录 1.多线程运行的安全问题 2.多线程同步代码块 3.同步方法的锁是this 4.静态同步方法的锁是Class对象 5.单例设计模式(面试中的考点) 6.死锁(一个发生死锁的例子) 多线程运行的安 ...
- 网络编程1--毕向东java基础教程视频学习笔记
目录: 01 网络编程概述1 02 网络编程概述2 03网络编程 网络模型 04网络编程 IP地址 05网络编程 TCP和UDP 06网络编程 Socket 07网络编程 UDP发送端 01 网络编程 ...
- 网络编程2--毕向东java基础教程视频学习笔记
Day 23 08 Udp接收端09 Udp键盘录入数据方式10 Udp聊天11 TCP传输12 TCP传输213 TCP练习14 TCP复制文件 08 Udp接收端 需求:定义一个应用程序,用于接收 ...
- 网络编程3--毕向东java基础教程视频学习笔记
Day24 01 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 import java.net ...
- IO流05--毕向东JAVA基础教程视频学习笔记
Day20 10 创建java文件列表11 Properties简述12 Properties存取13 Properties存取配置文件14 Properties练习15 PrintWriter16 ...
- IO流04--毕向东JAVA基础教程视频学习笔记
Day20 01 File概述02 File对象功能-创建和删除03 File对象功能-判断04 File对象功能-获取05 File对象功能-文件列表106 File对象功能-文件列表207 列出目 ...
- IO流01--毕向东JAVA基础教程视频学习笔记
提要 01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通过缓冲区复制文本文件)04 IO流(readLine的原理)05 IO流(MyBuffer ...
- 集合3--毕向东java基础教程视频学习笔记
Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型 ...
- 集合2--毕向东java基础教程视频学习笔记
Day14 08 LinkedList09 LinkedList练习10 ArrayList练习11 ArrayList练习2 12 HashSet13 HashSet存储自定义对象14 HashSe ...
随机推荐
- 关于Response.Redirect和Server.Execute的区别
Server.Transfer("path")内部重定向请求,是服务器内部的接管,浏览器无法意识到这个接管的发生,浏览器地址栏也不会发生变化.而Response.Redirect( ...
- 水晶报表13.x(Crystal Reports for VS2010)的安装部署经验
这两天搞安装包真心坎坷,一个问题接一个问题,先是为了实现自定义动作现啃vbs,后面又是安装过程老是报错: 各种搜索.各种尝试,总算搞掂,积累了些经验,分享一下. 首先CR for VS2010的所有东 ...
- sQLserver T-SQL 事务的用法
原文在: https://www.lesg.cn/netdaima/2016-55.html 在使用Mssql的时候经常需要用到存储过程 有些操作在前面发生错误的时候:需要回滚:这就需要事务了: 下面 ...
- iOS阶段学习第29天笔记(UITextField的介绍)
iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField 初始化实例代码: //创建一个UIt ...
- 通过python将图片生成字符画
基础知识: 1.python基础知识 快速学习链接:https://www.shiyanlou.com/courses/214 2.linux命令行操作 快速学习链接:https://www. ...
- postgreSQL绝对值
select * from t where flag=1 order by abs(index) desc
- Mybatis批量添加对象List
1.对应的xml文件: <!--批量添加--><insert id="insertStandardItemInfo" parameterType="ha ...
- 快速熟悉Velocity
果然公司用的东西跟平时学的东西不太一样,我们公司前台页面并不是我们熟悉的.html或者.jsp文件,而是很多人不知道的 .vm文件,其实只要我们理解了jsp文件,vm文件也就是一些基本语法不同而已. ...
- Mac 连接阿里云服务器
1. 通过命令行连接 Server 并设置 1.1 连接 Server #: ssh root@hctec.top ssh: 远程连接工具 root: 远程服务器用户名, 此处我用的是: root 用 ...
- Spring 整合 Redis
http://blog.csdn.net/java2000_wl/article/details/8543203/ pom构建: <modelVersion>4.0.0</model ...