64.【网络编程】(四)

简介: 64.【网络编程】

2.2(多线程实现双面的输出)

发送者是:学生/接收者是老师
package com.Kuangstudy.Net;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
//发送者1
public class UDPSenderDmeo1 implements Runnable {
        DatagramSocket datagramSocket=null;
        BufferedReader bufferedReader=null;
        private int fromPort;
        private String toIP;
        private int toPort;
        public UDPSenderDmeo1(){
        }
    public UDPSenderDmeo1( int fromPort, String toIP, int toPort) throws Exception {
        this.fromPort = fromPort;
        this.toIP = toIP;
        this.toPort = toPort;
        datagramSocket=new DatagramSocket(fromPort);
        bufferedReader=new BufferedReader(new InputStreamReader(System.in));
    }
    @Override
        public void run()  {
        while (true) {
            try {
                //读取一行
                String string_one = bufferedReader.readLine();
                byte[] buf = string_one.getBytes();
                //打包
                DatagramPacket packet = new DatagramPacket(buf, 0, buf.length, new InetSocketAddress(this.toIP, this.toPort));  //发送给谁?
                //发送包
                datagramSocket.send(packet);
                if (buf.equals("bye")) {
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        datagramSocket.close();
    }
}
发送者是:老师 接收者是:学生
package com.Kuangstudy.Net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
//接收者1
public class UDPSenderDmeo2 implements Runnable {
    private String msgFrom;
    DatagramSocket datagramSocket=null;
    private int port;
    public UDPSenderDmeo2() {
    }
    public UDPSenderDmeo2(int port,String msgFrom) {
        this.msgFrom=msgFrom;
        this.port = port;
        try {
            datagramSocket=new DatagramSocket(port);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
    @Override
    public void run() {
        while (true) {
            try {
                //准备接受包裹
                byte[] buf = new byte[1024];
                DatagramPacket datagramPacket = new DatagramPacket(buf, 0, buf.length );
                datagramSocket.receive(datagramPacket);   //阻塞接受
                //断开连接
                byte []buf_two=datagramPacket.getData();  //获得数据
                //接受的数据
                String string_one=new String(buf_two,0,buf_two.length);
                //打印输出
                System.out.println(msgFrom+":"+string_one.trim());
                if (string_one.trim().equals("bye".trim())){
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        datagramSocket.close();
    }
}
实现发送者是:学生的接口 ,接收者是:老师
import com.Kuangstudy.Net.UDPSenderDmeo1;
import com.Kuangstudy.Net.UDPSenderDmeo2;
public class TalkStudent {
    public static void main(String[] args) throws Exception {
        //开启两个线程
        new Thread(new UDPSenderDmeo1(7777,"localhost",9999)).start();
        new Thread(new UDPSenderDmeo2(8888,"老师")).start();
    }
}
实现发送者是:老师的接口 ,接收者是:学生
• 1
import com.Kuangstudy.Net.UDPSenderDmeo1;
import com.Kuangstudy.Net.UDPSenderDmeo2;
public class TalkTeacher_02 {
    public static void main(String[] args) throws Exception{
        new Thread(new UDPSenderDmeo1(5555,"localhost",8888)).start();
        new Thread(new UDPSenderDmeo2(9999,"学生")).start();
    }
}

(八)、URL

1.定义:
统一资源定位符:定位资源的,定位互联网上的某一项。
2.协议:      //IP:端口/项目名/资源
3.
(1). DNS 域名解析  www.baidu.com 实质上是:IP

1.爬取资源包

import com.Kuangstudy.Net.UDPSenderDmeo1;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class Demo2 {
    public static void main(String[] args) throws Exception{
        //下载文件
        URL url = new URL("");
        //2.链接此资源
        HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
        //3.
        InputStream inputStream = urlConnection.getInputStream();
        FileOutputStream fileOutputStream=new FileOutputStream("Security.jpg");
        byte []buf=new byte[1024];
        int count=0;
        while ((count=inputStream.read(buf))!=-1){
            fileOutputStream.write(buf,0,count);
        }
        inputStream.close();
        fileOutputStream.close();
        urlConnection.disconnect();
    }
}

2.URL知识点

import java.net.URL;
public class Demo1 {
    public static void main(String[] args)throws Exception {
        URL url = new URL("http://localhost:8080/helloworld/index.jsp?username=liming&password=123");
        System.out.println(url.getProtocol());  //得到协议名
        System.out.println(url.getHost());      //得到主机名
        System.out.println(url.getPort());      //得到端口号
        System.out.println(url.getPath());      //获得文件
        System.out.println(url.getFile());      //全路径
        System.out.println(url.getQuery());     //全参数
    }
}

"http://dl.stream.qqmusic.qq.com/C400000LQTRH4d6iQO.m4a?guid=3228671748&vkey=32B4FCD4F80B08521BEA1EB37A2AF2B1C6433807F310F20C8F78D52F4976FCC1114EC84B5EEDAE4827FA3928DEB1880E807485D82E7C1760&uin=&fromtag=120032"
相关文章
|
程序员 Shell Linux
01 python - 历史起源
01 python - 历史起源
375 0
|
Arthas 监控 Cloud Native
用 Arthas 神器来诊断 HBase 异常进程
HBase 集群的某一个 RegionServer 的 CPU 使用率突然飙升到百分之百,单独重启该 RegionServer 之后,CPU 的负载依旧会逐渐攀上顶峰。多次重启集群之后,CPU 满载的现象依然会复现,且会持续居高不下,慢慢地该 RegionServer 就会宕掉,慢慢地 HBase 集群就完犊子了。
用 Arthas 神器来诊断 HBase 异常进程
|
8月前
|
存储 并行计算 算法
CUDA性能优化实战:7个步骤让并行归约算法提升10倍效率
https://avoid.overfit.cn/post/af59d0a6ce474b8fa7a8eafb2117a404
509 1
CUDA性能优化实战:7个步骤让并行归约算法提升10倍效率
|
前端开发 JavaScript 安全
剖析跨域问题始末及其解决方案——前端必备交叉知识(一)
跨域问题是前端开发中的常见挑战,了解并掌握不同的跨域解决方案能帮助你更高效地进行开发工作。本文对同源策略、跨域以及解决跨域的三种方案: CORS、JSONP、代理等跨域技术进行了介绍。选择合适的跨域解决方案非常重要。 在实际开发中,推荐优先考虑使用 CORS,因为它是现代浏览器支持的标准,且安全性较高。如果服务器无法修改,则可以考虑使用代理。如果是特殊情况,可以使用 JSONP,但要注意安全性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错
|
JSON 监控 网络协议
Bilibili直播信息流:连接方法与数据解析
本文详细介绍了自行实现B站直播WebSocket连接的完整流程。解析了基于WebSocket的应用层协议结构,涵盖认证包构建、心跳机制维护及数据包解析步骤,为开发者定制直播数据监控提供了完整技术方案。
1510 9
|
人工智能 JavaScript API
DeepSeek-R1满血版上线阿里云,新用户专享100万token额度,5分钟快速部署!
DeepSeek是当前AI领域的热门话题,尤其其大模型备受关注。由于网页版访问时常超时,推荐使用阿里云百炼的API调用方式快速体验。此方法仅需五分钟,提供100万免费Token,有效期至2025年7月26日。用户可通过注册阿里云账户、开通服务、创建API-Key、安装并配置ChatBox客户端等步骤轻松上手。测试结果显示,DeepSeek-R1在回答问题、解释数学概念及编写代码等方面表现优异。部署成本低、操作简便,是体验DeepSeek的理想选择。
DeepSeek-R1满血版上线阿里云,新用户专享100万token额度,5分钟快速部署!
|
JSON 测试技术 API
连测试大拿都不敢说熟练掌握的HTTPRUNNER2.x使用技巧
这篇文章详细介绍了HTTPRunner 2.x的高级使用技巧,包括工具的设计思想、核心功能、分层测试思想,以及如何搭建开发环境、理解基础概念、掌握关键知识点和进行框架扩展使用。
342 2
连测试大拿都不敢说熟练掌握的HTTPRUNNER2.x使用技巧
|
缓存 运维 负载均衡
java面试题之个人对正向代理和反向代理的理解
java面试题之个人对正向代理和反向代理的理解
1370 3
|
分布式计算 Java Linux
centos7通过Ambari2.74部署Hadoop
centos7通过Ambari2.74部署Hadoop
|
机器学习/深度学习 算法 大数据
Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析(下)
在 Vision Transformer 大行其道碾压万物的同时,也有人在尝试非注意力的 Transformer 架构(如果没有注意力模块,那还能称为 Transformer 吗)。这是一个好的现象,总有人要去开拓新方向。相比 Attention-based 结构,MLP-based 顾名思义就是不需要注意力了,将 Transformer 内部的注意力计算模块简单替换为 MLP 全连接结构,也可以达到同样性能。典型代表是 MLP-Mixer 和后续的 ResMLP。
1573 0
Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析(下)

热门文章

最新文章