网络编程三 聊天室的实现 音乐十年-陈奕迅 的下载

聊天室实现 两人都是发送也是接收方

发送线程代码

package com.cjg.netCode;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class threadChatUdp implements Runnable{
    DatagramSocket ds = null;
    BufferedReader bufferedReader =null;
    private String  toIp;
    private int toPort;
    private int fromPort;

    public threadChatUdp(String toIp, int toPort, int fromPort) {
        this.toIp = toIp;
        this.toPort = toPort;
        this.fromPort = fromPort;
        try {
            ds= new DatagramSocket(fromPort);
            bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {



        while (true){
            String s = null;
            try {
                s = bufferedReader.readLine();
                byte[] bytes = s.getBytes();
                int length = bytes.length;

                InetSocketAddress socket = new InetSocketAddress(toIp, toPort);
                DatagramPacket datagramPacket = new DatagramPacket(bytes,0,length,socket);
                ds.send(datagramPacket);
                if (s.equals("bye")){
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }


        }
        ds.close();
    }
}

接收线程代码

package com.cjg.netCode;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class udpChatRecevice implements Runnable {
    DatagramSocket socket =null;
    private int port;
    private String msg;

    public udpChatRecevice(int port,String msg) {
        this.port=port;
        this.msg=msg;
        //创建接收端口
        try {
            socket = new DatagramSocket(port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        while (true){
            try {
                //接收数据
                byte[] bytes = new byte[1024];
                DatagramPacket Packet = new DatagramPacket(bytes,0,bytes.length);
                socket.receive(Packet); //阻塞式 接受包

                byte[] data = Packet.getData();
                String s = new String(data, 0, data.length);
                System.out.println(msg+""+s);

                if (s.equals("bye")){

                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        socket.close();
    }
}

组合线程代码

package com.cjg.netCode;

public class talkTeacher {
    public static void main(String[] args) {
        new Thread(new threadChatUdp("127.0.0.1",8888,5555)).start();
        new Thread(new udpChatRecevice(9999,"学生说:")).start();
    }
}


package com.cjg.netCode;

public class talkStudent {
    public static void main(String[] args) {
        new Thread(new threadChatUdp("127.0.0.1",9999,7777)).start();
        new Thread(new udpChatRecevice(8888,"老师:")).start();
    }
}

1.8 url 统一资源定位符

https://www.baidu.com/

https 协议

www.baidu,com是由dns域名解析后的ip地址

端口号

合起来是 协议://ip:端口/项目名/资源

URL 网络类

package com.cjg.netCode;

import java.net.MalformedURLException;
import java.net.URL;

public class udpURL {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://localhost:7777/url/url.html?username=me&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.cjg.netCode;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class udpURLTrue {
    public static void main(String[] args) throws Exception {
        //获取下载地址
        URL url = new URL("https://freetyst.nf.migu.cn/public/product5th/product35/2019/10/1219/2018%E5%B9%B401%E6%9C%8829%E6%97%A514%E7%82%B911%E5%88%86%E5%86%85%E5%AE%B9%E5%87%86%E5%85%A5%E7%A6%BE%E4%BF%A1%E9%A2%84%E7%95%99999%E9%A6%96/%E6%AD%8C%E6%9B%B2%E4%B8%8B%E8%BD%BD/MP3_40_16_Stero/69910406417.mp3?key=c70ade03b2b2b6a2&Tim=1615361397852&channelid=00&msisdn=8d836d8cde8f44a29314f73e044f541e&CI=699104064172600908000006799484&F=000009");
        //连接这个资源 http
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        //输入流接收数据
        InputStream inputStream = urlConnection.getInputStream();
        //输出问一个文件
        FileOutputStream fileOutputStream = new FileOutputStream("17.mp3");
        //默认步骤
        byte[] bytes = new byte[1024];
        int len;
        while ((len=inputStream.read(bytes))!=-1){
            fileOutputStream.write(bytes,0,len);
        }
    }
}

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值