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. [译]Rxjs&Angular-退订可观察对象的n中方式

    原文/出处: RxJS & Angular - Unsubscribe Like a Pro 在angular项目中我们不可避免的要使用RxJS可观察对象(Observables)来进行订阅( ...

  2. 设计模式(十五)——命令模式(Spring框架的JdbcTemplate源码分析)

    1 智能生活项目需求 看一个具体的需求 1) 我们买了一套智能家电,有照明灯.风扇.冰箱.洗衣机,我们只要在手机上安装 app 就可以控制对这些家电工作. 2) 这些智能家电来自不同的厂家,我们不想针 ...

  3. SPOJ1812 LCS2 - Longest Common Substring II【SAM LCS】

    LCS2 - Longest Common Substring II 多个字符串找最长公共子串 以其中一个串建\(SAM\),然后用其他串一个个去匹配,每次的匹配方式和两个串找\(LCS\)一样,就是 ...

  4. hdu2818 Building Block

    Problem Description John are playing with blocks. There are N blocks (1 <= N <= 30000) numbere ...

  5. hdu4325 Flowers

    Problem Description As is known to all, the blooming time and duration varies between different kind ...

  6. Educational Codeforces Round 94 (Rated for Div. 2) B. RPG Protagonist (数学)

    题意:你和你的随从去偷剑和战斧,你可以最多可以拿\(p\)重的东西,随从可以拿\(f\)重的东西,总共有\(cnt_{s}\)把剑,\(cnt_{w}\)把战斧,每把剑重\(s\),战斧重\(w\), ...

  7. 搭建基于springboot轻量级读写分离开发框架

    何为读写分离 读写分离是指对资源的修改和读取进行分离,能解决很多数据库瓶颈,以及代码混乱难以维护等相关的问题,使系统有更好的扩展性,维护性和可用性. 一般会分三个步骤来实现: 一. 主从数据库搭建 信 ...

  8. Open3d之交互式可视化

    本篇教程介绍了Open3D的可视化窗口的交互功能. # -*- coding:utf-8 -*- import copy import numpy as np import open3d as o3d ...

  9. Python——Django框架——Form框架

    一.引入Form包 from django import forms 二.定义规则 class Forms_Login(forms.Form): 用户名 = forms.CharField(requi ...

  10. SOHO 程序员

    SOHO 程序员:从事程序开发.维护的家居办公人员. 一.自由程序员 SOHO程序员代表一种自由.弹性而新型的工作方式.SOHO,代表一种新经济.新概念. 是一些热爱软件开发的一族. SOHO程序员 ...