1.inputStreamReader 字节的读取流--->字符的读取流
2.outputStreamWriter 字节的写入流—>字符的写入流
一、如何利用正则表达式找到img标签 compile编译编制
int c=0;
Pattern p = Pattern.compile("<img\\ssrc=\"([^>\"]+)\"\\s(width=\"\\d+\"\\sheight=\"\\d+\"\\s)?/>");//里面写上正则
Matcher m = p.matcher(sb);//匹配谁
while(m.find()){
c++;
String s = m.group(1);
myload("file:///E:/1-0809/S1阶段/6-html/site/"+s);
}
二、下载图片的方法
public static void myload(String str){
try {
URL url = new URL(str);
InputStream is = url.openStream();
String s = str.substring(str.lastIndexOf("/")+1);
File file = new File("f:\\图片\\aa\\"+s);
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int n = -1;
while((n=is.read())!=-1){
bos.write(n);
bos.flush();
}
bos.close();
fos.close();
is.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
三、socket实现网络聊天
* 1.启动服务器
* 1.1等待客户端上线
* 2.客户端连接服务器
* 3.客户端给服务器发送信息(写)
* 4.服务器接收客户端的信息(读)
* 5.服务器给客户端回复信息
* 6.客户端接收服务器的信息
* 7.关闭所有连接
1.启动服务器
ServerSocket ss = new ServerSocket(8899);
1.1等待客户端上线
System.out.println("服务器已启动,等待客户端上线。。。。。。");
Socket sk = ss.accept();
System.out.println("客户端已经上线,主机名为:"+sk.getInetAddress().getHostName());
2.客户端连接服务器
Socket sk = new Socket(InetAddress.getByName("127.0.0.1"), 8899);
System.out.println("客户端已上线~~~~~~");
3.客户端给服务器发送信息
//获取网络的字节写入流
OutputStream os = sk.getOutputStream();
//转为字符的写入流
OutputStreamWriter osw = new OutputStreamWriter(os);
//包装
BufferedWriter bw = new BufferedWriter(osw);
//由用户自己输入内容
Scanner mys = new Scanner(System.in);
System.out.println("请输入你要发送的内容:");
String sa = mys.next();
//写入网络中
bw.write(sa);
//换行&&刷新
bw.newLine();
bw.flush();
4.服务器接收客户端的信息
//获取网络的读取流
InputStream is = sk.getInputStream();
//转换为字符的读取流
InputStreamReader isr = new InputStreamReader(is);
//包装
BufferedReader br = new BufferedReader(isr);
//读取一行
String sa = br.readLine();
//打印客户端发送过来的信息
System.out.println("收到客户端的信息:"+sa);
*********************************************************888
一、回顾以下正则表达式
\d:0-9
\w:a-z A-Z 0-9 _
\s:空格
[abc]{5}:在abc中任取 重复5次
[a-f]{2,5}:在abcdef中任取 取2-5次
[a-c]{5,}:在abc中任取 至少取5次
- :至少出现一次
? :要么出现一次 要么不出现 0/1
- :取任意次
^ :[^abc] 反面
===============================================================================
二、认识两个类
1.Pattern 正则表达式的编译表示形式
2.Matcher 执行匹配操作的引擎
初识核心代码:
int c = 0;
Pattern p = Pattern.compile("<img\ssrc="([^>"]+)"\s/>");
Matcher m = p.matcher(sb);
while(m.find()){如果有 则返回true 否则返回false
c++;
System.out.println(m.group(2));
}
String str = “abcderf”;
String regex = “a(b)c”
===============================================================================
三、实现简单的客户端与服务器之间的对话
—什么是TCP协议与UDP协议?
TCP协议分4层: 应用==>传输==>网络==>数据链路
UDP协议:无连接(不管三七二十一往对方客户端丢东西,至于接不接得到我不管)
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。
当客户端和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。
TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。
UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。
由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
使用这个协议的常见服务有DNS、SNMP、QQ(2003版本之前)等。
—两者的区别?
TCP:连接 == 打电话 == 双方建立通道,信息在通道中传送,双方响应,信息传递可靠性高,但资源开销大,独占一个通道,在断开连接前不能建立另一个连接(两人打电话,第三人不能打入)。
UDP:无连接 == 寄信 == 就是发送信息,没有开始与结束,一次性传递,也不需要接受方响应,无法保证信息传递的可靠性(寄了,但不一定能收到)。
================================================================================
套接字 Socket:(面向TCP)
源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。
其用于标识客户端请求的服务器和服务。
可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定。
TCP和UDP的网络通信的基本操作单元。
inputStreamReader:将字节的读取流–>字符的读取流
outputStreamWriter:将字节的写入流–>字符的写入流
客户端:Client
服务器:Server