前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA--网络编程

JAVA--网络编程

作者头像
宁在春
发布2022-10-31 13:49:29
1810
发布2022-10-31 13:49:29
举报
文章被收录于专栏:关于Java学习@宁在春

JAVA— 网络编程

  • U D P 多线程在线咨询
  • URL下载网上资源

通过URL下载网上资源下载

端口

TCP实现聊天

U D P 多线程在线咨询

端口

端口表示计算机上一个程序的进程

  • 不同的进程有不同的端口号 用来区分软件
  • 被规定 0~65535
  • 端口分类 (1)公认端口(Well Known Ports)

(2)注册端口(Registered Ports)

(3)动态和/或私有端口(Dyanmic and /or Private Ports)

查看所有的端口

代码语言:javascript
复制
netstat -ano #查看所有的端口
netstat -ano findstr "5900" # 查看指定的端口
代码语言:javascript
复制
import java.net.InetAddress;
import java.net.UnknownHostException;

public class TestIntAddress {
    public static void main(String[] args) {
        try {
            // 查询本机地址
            InetAddress inetAddress1  = InetAddress.getByName("127.0.0.1");
            System.out.println(inetAddress1);

            // 查询百度的 主机地址
            InetAddress inetAddress2 = InetAddress.getByName("www.baidu.com");
            System.out.println(inetAddress2);

            System.out.println(inetAddress2.getAddress());
            //  规范的名字
             System.out.println(inetAddress2.getCanonicalHostName());
            //查询  ip
            System.out.println(inetAddress2.getHostAddress());
            //查询域名
            System.out.println(inetAddress2.getHostName());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

TCP实现聊天


客户端:

  1. 连接服务器 Socket
  2. 发送消息
代码语言:javascript
复制
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

// 客户端
public class TcpClientDemo01 {
    public static void main(String[] args) {
        OutputStream os =null;
        Socket socket = null;
        try {
            // 知道 服务器地址 和端口
            InetAddress serverIp= InetAddress.getByName("127.0.0.1");
            int port = 9999;

            //  创建一个socket 连接
            socket = new Socket(serverIp,port);

            // 3 发送消息 IO 流
           os = socket.getOutputStream();
            os.write("你好啊,大哥哥,每一天都要开开心心哦 六一儿童节礼物还没有给你!".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if(os != null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(socket != null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

服务器

  1. 建立服务的端口 ServerSocket
  2. 等待用户的链接 accept
  3. 接收用户的消息
代码语言:javascript
复制
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

// 服务器端
public class TcpServerDemo01 {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream is = null;
        ByteArrayOutputStream  baos = null;


        try {
            //   我得有一个地址
            serverSocket = new ServerSocket(9999);
            // 等待客户端连接过来
            socket = serverSocket.accept();
            // 读取客户端的消息
            is = socket.getInputStream();

            //管道流
            baos = new ByteArrayOutputStream();
            byte[] buffer =new byte[1024];
            int len;
            while((len = is.read(buffer)) != -1){
                baos.write(buffer,0,len);
            }
            System.out.println(baos.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

UDP多线程在线咨询

代码语言:javascript
复制
// 第一个类    Send 发送
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 fromIP;
     private  String toIP;
     private  int toPort;

    public TalkSend(int fromIP, String toIP, int toPort) {
        this.fromIP = fromIP;
        this.toIP = toIP;
        this.toPort = toPort;
        try {
            socket = new DatagramSocket(fromIP);
            reader = new BufferedReader(new InputStreamReader(System.in));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    @Override
    public void run() {
        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();
    }

}

代码语言:javascript
复制
// 第二个类    Receive 接收
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 (SocketException 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);
                socket.receive(packet);
                // 阻塞时接收包裹


                // 断开连接  bye
                byte[] data = packet.getData();
                String receiveDate = new String (data, 0 ,data.length);
                System.out.println(msgFrom+":"+receiveDate);
                if(receiveDate.equals("bye")){
                    break;
                }
            }catch (IOException e){
                e.printStackTrace();
            }

        }
                socket.close();
    }
}

测试类 学生 和 老师

代码语言:javascript
复制
public class TalkStudent {
    public static void main(String[] args) {
        // 开启两个线程

        new Thread(new TalkSend(7777,"localhost",9999)).start();
        new Thread(new TalkReceive(8888,"老师")).start();
    }
}
代码语言:javascript
复制
public class TalkTeacher {
    public static void main(String[] args) {
        new Thread(new TalkSend(5555,"localhost",8888)).start();
        new Thread(new TalkReceive(9999,"学生")).start();
    }
}
  1. 效果图
在这里插入图片描述
在这里插入图片描述

不知道 IDEA 怎么控制台怎分屏

URL网上资源下载

  • 本次是以从网上下载网易云音乐为例:
  • 下载的必要要素 必须知道 网上资源的URL 才可以进行下载
在这里插入图片描述
在这里插入图片描述
  • 首先去浏览器上搜索 然后进入浏览器控制台 找到音频的 URL 然后这个URL 就是我们进行下载的路径。
代码语言:javascript
复制
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class UrlDown {
    public static void main(String[] args) throws Exception {
        // 下载地址
        URL url = new URL("http://m10.music.126.net/20200602120835/02638bb77e5403d65fdb86d86f2863d6/yyaac/obj/wonDkMOGw6XDiTHCmMOi/2703362268/aa27/f3dd/abf2/062dde2b67cf0cf1ad5d242fae90f156.m4a");
      // 这个里面放的地址就是 之前在网上找到的音频的url 
        
        // 连接到这个资源 HTTP
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        InputStream inputStream = urlConnection.getInputStream();

        FileOutputStream fos = new FileOutputStream("f156.m4a");
        // 这个f156.m4a    “.m4a” 就是文件保存格式 名字随意是随意取的  

        
        byte[] buffer = new byte[1024];
        int len;
        while((len=inputStream.read(buffer)) != -1){
            fos.write(buffer,0,len);
        }
        
        //  关闭连接  
        fos.close();
        inputStream.close();
        urlConnection.disconnect();
    }
}

成功就会在idea中出现一个 .m4a 格式的文件 到本地文件夹中 通过音乐软件打开即可。能播放就是成功的。


初次写这样的博客 不足之处 请见谅。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JAVA— 网络编程
    • 端口
      • TCP实现聊天
        • UDP多线程在线咨询
          • URL网上资源下载
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档