网络编程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 ...
随机推荐
- Bootstrap学习笔记系列5------Bootstrap图片显示
通过添加一下的class来实现bootstrap对图片的支持 img-round 通过border-radius:6px 来获得图片圆角 img-circle 通过border-radius:50%来 ...
- bootstrap学习笔记系列4------bootstrap按钮
按钮标签 在<a>,<button>或input元素上使用按钮class.但是为了避免跨浏览器的不一致性,建议使用<button>标签. <!DOCTYPE ...
- 15天玩转redis —— 第六篇 有序集合类型
今天我们说一下Redis中最后一个数据类型 “有序集合类型”,回首之前学过的几个数据结构,不知道你会不会由衷感叹,开源的世界真好,写这 些代码的好心人真的要一生平安哈,不管我们想没想的到的东西,在这个 ...
- 疯狂Android讲义 - 学习笔记(二)
Android应用的用户界面编程 2.1 界面编程与视图(View)组件 Android应用的绝大部分UI组件放在android.widget.android.view包及其子包中,所有UI组件都继承 ...
- redis-desktop-manager
介绍一款Redis图形管理工具:redis-desktop-manager 下载地址:点击打开链接 我们打开redis-cl.exe 客户端,在里面添加了key= name ,value=heyang ...
- Scalaz(38)- Free :Coproduct-Monadic语句组合
很多函数式编程爱好者都把FP称为Monadic Programming,意思是用Monad进行编程.我想FP作为一种比较成熟的编程模式,应该有一套比较规范的操作模式吧.因为Free能把任何F[A]升格 ...
- Hibernate关联映射(单项多对一和一对多、双向一对多)
最近总是接触着新的知识点来扩展自己的知识面:不停的让自己在原地接触天空的感觉真的很美好!!!革命没有成功,程序员的我们怎么能不努力呢...... 一.用员工和部门来剖析关联映射的原理. 1)从这张截图 ...
- jstl标签2
我们前面讲的是ArrayList集合迭代,Hashmap/Hashset的情况下 举例: <h3>对map和set的迭代</h3> 放入字符串 <% //模拟 Map m ...
- ADO.NET(数据访问技术)
简单的说,C#已经内置了一些类,我们可以利用这些类来访问数据库.在这里,我们假设读者已经熟悉SqlServer数据库或者其它数据库(我以后也会补上相关内容).我们如何来实现这项技术呢?大致可以分为三个 ...
- 基于jQuery的ajax对WebApi和OData的封装
基于jQuery的ajax对WebApi和OData的封装 WebApi 的使用带来了一个显著的特点,对type有一定的要求.一般ajax的type无非就是两种,GET和POST.如果用JSONP来跨 ...