UDP多线程在线咨询

 package com.kuang.chat;
 ​
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.InetSocketAddress;
 ​
 public class TalkSend implements Runnable{
     DatagramSocket socket = null;
     BufferedReader reader = null;
 ​
     private int fromPort;
     private String toIP;
     private int toPort;
 ​
     public TalkSend(int fromPort, String toIP, int toPort) {
         this.fromPort = fromPort;
         this.toIP = toIP;
         this.toPort = toPort;
         try{
         socket = new DatagramSocket(fromPort);
         reader = new BufferedReader(new InputStreamReader(System.in));
 ​
        }catch (Exception e){
             e.printStackTrace();
        }
 ​
    }
 ​
     public TalkSend(){
 ​
 ​
    }
     @Override
     public void run(){
 ​
 ​
         //准备数据:控制台读取System.in
 ​
         while(true) {
             try{
             String data = reader.readLine();
             byte[] datas = data.getBytes();
 ​
             DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIP,this.toPort));
 ​
             socket.send(packet);
             if (data.equals("bye")) {
                 break;
            }
                }catch (Exception e){
                 e.printStackTrace();
            }
            }
         socket.close();
        }
 ​
    }
 ​
 package com.kuang.chat;
 ​
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.SocketException;
 ​
 public class TalkReceive implements Runnable{
     DatagramSocket socket = null;
     private int port;
     private String msgFrom;
 ​
     public TalkReceive(int port,String msgFrom) {
         this.port = port;
         this.msgFrom = msgFrom;
         try {
             socket = new DatagramSocket(port);
        } catch (Exception e) {
             e.printStackTrace();
        }
    }
 ​
     @Override
 ​
     public  void run(){
 ​
         while (true) {
             //准备接收包裹
         try {
             byte[] container = new byte[1024];
             DatagramPacket packet = new DatagramPacket(container, 0, container.length);
             socket.receive(packet);//阻塞式接收包裹
 ​
             //断开链接 bye
             byte[] data = packet.getData();
             String receiveData = new String(data, 0, data.length);
             System.out.println(msgFrom + ":" + receiveData);
 ​
             if (receiveData.equals("bye")) {
                 break;
            }
        }catch (IOException e){
             e.printStackTrace();
        }
 ​
 ​
 ​
        }
         socket.close();
    }
    }
 ​
 ​
 package com.kuang.chat;
 ​
 public class TalkStudent {
     public static void main(String[] args) {
         //开启两个线程
         new Thread(new TalkSend(7777,"localhost",9999)).start();
         new Thread(new TalkReceive(8888,"老师")).start();
    }
 }
 ​
 package com.kuang.chat;
 ​
 public class TalkTeacher {
     public static void main(String[] args) {
         new Thread(new TalkSend(55555,"localhost",8888)).start();
         new Thread(new TalkReceive(9999,"学生")).start();
    }
 }
 ​

URL

https://www.baidu.com/

统一资源定位符:定位资源的,定位互联网上的某一个资源

DNS域名解析 www.baidu.com 解析为xxx.x..x..x

 协议://ip地址:端口/项目名/资源
 package com.kuang.lesson10;
 ​
 import java.net.MalformedURLException;
 import java.net.URL;
 ​
 public class URLDemo01 {
     public static void main(String[] args) throws MalformedURLException {
         URL url = new URL("http://localhost:8080/helloworld/index.jsp?username=kuangshen&password=123");
         System.out.println(url.getProtocol());//协议
         System.out.println(url.getHost());//主机ip
         System.out.println(url.getPort());//端口
         System.out.println(url.getPath());//文件
         System.out.println(url.getFile());//全路径
         System.out.println(url.getQuery());//参数
 ​
 ​
    }
 }
 ​

下载资源:

 package com.kuang.lesson10;
 ​
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.DatagramSocket;
 import java.net.HttpURLConnection;
 import java.net.URL;
 ​
 public class UrlDown {
     public static void main(String[] args) throws IOException {
         //1.下载地址
         URL url = new URL("http://localhost:8080/qinjiang/SecurityFile.txt");
         //2.连接到这个资源HTTP
         HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
         InputStream inputStream = urlConnection.getInputStream();
         FileOutputStream fos = new FileOutputStream("SecurityFile.txt");
         byte[] buffer = new byte[1024];
         int len;
         while((len=inputStream.read(buffer))!=-1){
             fos.write(buffer,0,len);//写出这个数据
 ​
 ​
 ​
        }
         fos.close();
         inputStream.close();
         urlConnection.disconnect();//断开连接
    }
 ​
 ​
 }
 ​

第39天学习打卡(UDP多线程在线咨询 URL)的更多相关文章

  1. 第39天学习打卡(多线程 Thread Runnable 初始并发问题 Callable )

    多线程详解 01线程简介 Process与Thread 程序:是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念. 进程则是执行程序的一次执行过程,它是一个动态的概念.是系统资源分配的 ...

  2. 转:学习笔记:delphi多线程学识

    学习笔记:delphi多线程知识 最近一直在温习旧的知识,刚好学习了一下Java的线程安全方面的知识,今天想起之前一直做的Delphi开发,所以还是有必要温习一下,看看这些不同的编程语言有什么不同之处 ...

  3. 多线程校验url的种种。。。

    东西不经常看就容易忘,这两天抽空写了一个补丁库url验证工具,挺曲折的,记录一下需求大概流程如下:转换补丁库为xml,解析xml得到所有url,多线程校验url.就不到100行有效代码,断断续续写了三 ...

  4. iOS学习——(转)多线程

    转载自:iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用 一.多线程的基本概念 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和 ...

  5. 第40天学习打卡(静态代理 Lambda表达式 线程状态 线程同步 同步方法)

    静态代理  package com.kuang.demo03; //静态代理模式总结 //真实对象和代理对象都要实现同一个接口 //代理对象要代理真实角色 //好处:  //代理对象可以做很多真实对象 ...

  6. Android 学习笔记之使用多线程实现断点下载...

    PS:莫名其妙的迷茫... 学习内容: 1.使用多线程实现文件下载...   多线程下载是加快下载速度的一种方式..通过开启多个线程去执行一个任务..可以使任务的执行速度变快..多线程的任务下载时常都 ...

  7. 【学习总结】【多线程】 线程 & 进程 & NSThread(多线程的一套API)

    一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开 Chrome.Xcode,系统就会分别启动2个进 ...

  8. Android(java)学习笔记216:多线程断点下载的原理(Android实现)

    之前在Android(java)学习笔记215中,我们从JavaSE的角度去实现了多线程断点下载,下面从Android角度实现这个断点下载: 1.新建一个Android工程: (1)其中我们先实现布局 ...

  9. Java基础学习笔记二十一 多线程

    多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线 ...

随机推荐

  1. MySQL复合索引探究

    复合索引(又称为联合索引),是在多个列上创建的索引.创建复合索引最重要的是列顺序的选择,这关系到索引能否使用上,或者影响多少个谓词条件能使用上索引.复合索引的使用遵循最左匹配原则,只有索引左边的列匹配 ...

  2. Linux换行符和Windows换行符的区别与转换

    不同系统文本文件的行尾换行符不同:    Windows为一个回车'\r'(CR或^M)和一个换行'\n'(NL或LF)(括号内是其它显示方法)    Linux为一个换行'\n'    Mac为一个 ...

  3. B - 规律题2

    10 123456 1:f(y)=1+2+3+4+5+6=21 2:f(y)=3 3        3 b进制,<b; 10 123 1+2+3=6;是3的倍数 1234 =(999)*1+99 ...

  4. 2015 Multi-University Training Contest 1(7/12)

    2015 Multi-University Training Contest 1 A.OO's Sequence 计算每个数的贡献 找出第\(i\)个数左边最靠右的因子位置\(lp\)和右边最靠左的因 ...

  5. Codeforces Round #646 (Div. 2) 题解 (ABCDE)

    目录 A. Odd Selection B. Subsequence Hate C. Game On Leaves D. Guess The Maximums E. Tree Shuffling ht ...

  6. hdu4686 Arc of Dream

    Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission ...

  7. Codeforces Round #428 (Div. 2) C. Journey (简单搜索)

    题意:给你一颗树(边是无向的),从根节点向下走,统计走到每个子节点的概率,求所有叶子节点的深度乘上概率的和. 题解:每层子节点的概率等于上一层节点的概率乘\(1\)除以这层的子节点数,所以我们用\(d ...

  8. .net中swagger忽略某些字段

    需要忽略的字段上用特性 [System.Text.Json.Serialization.JsonIgnore] 例如:

  9. 数理统计9:完备统计量,指数族,充分完备统计量法,CR不等式

    昨天我们给出了统计量是UMVUE的一个必要条件:它是充分统计量的函数,且是无偏估计,但这并非充分条件.如果说一个统计量的无偏估计函数一定是UMVUE,那么它还应当具有完备性的条件,这就是我们今天将探讨 ...

  10. 基于OpenCV全景拼接(Python)SIFT/SURF

    一.实验内容: 利用sift算法,实现全景拼接算法,将给定的两幅图片拼接为一幅. 二.实验环境: 主机配置: CPU :intel core i5-7300 2.50GHZ RAM :8.0GB 运行 ...