图片下载&&网络URL实现简易聊天

本文深入探讨了网络编程的基本概念,包括TCP与UDP协议的区别,以及如何使用Java实现客户端与服务器间的简单对话。同时,文章详细讲解了正则表达式的应用,通过实例演示了如何使用正则表达式匹配HTML中的img标签,并下载图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值