IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> java网络编程-实现聊天程序 -> 正文阅读

[网络协议]java网络编程-实现聊天程序

利用Datagramsocket创建连接,实现UDP,并使用多线程实现教师端和学生端的聊天。
接收端的程序如下:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package chats;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class talkreceive implements Runnable {
    DatagramSocket socket = null;//初始化一个socket连接
    private int port;//端口号
    private String msgfrom;//消息来源

    public talkreceive(int port, String msgfrom) {//构造函数
        this.port = port;
        this.msgfrom = msgfrom;

        try {
            this.socket = new DatagramSocket(this.port);
        } catch (Exception var4) {
            var4.printStackTrace();
        }

    }

    public void run() {
        while(true) {
            try {
                byte[] container = new byte[1024];//开创一个字节数组作为缓冲区
                DatagramPacket packet = new DatagramPacket(container, 0, container.length);//创建一格数据包
                this.socket.receive(packet);//通过传入的socket连接,接受数据包。
                byte[] bytes1 = packet.getData();//读取包中数据
                String ans = new String(bytes1, 0, bytes1.length);
                System.out.println(this.msgfrom + ":" + ans);
                if (!ans.trim().equals("bye")) {
                    continue;
                }//接受到bye则结束聊天。

                this.socket.close();
            } catch (Exception var5) {
                var5.printStackTrace();
            }

            return;
        }
    }
}

数据发送端的写法:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package chats;

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 bufferedReader = null;
    private int fromport;
    private String toip;
    private int toport;

    public talksend(int fromport, String toip, int toport) {//成员包括发送端口,目标ip,目标端口
        this.fromport = fromport;
        this.toport = toport;
        this.toip = toip;

        try {
            this.socket = new DatagramSocket(fromport);
            this.bufferedReader = new BufferedReader(new InputStreamReader(System.in));//使用bufferreader读取系统流的输入。
        } catch (Exception var5) {
            var5.printStackTrace();
        }

    }

    public void run() {
        while(true) {
            try {
                String data = this.bufferedReader.readLine();//流中的一行字符
                byte[] Data = data.getBytes();
                DatagramPacket packet = new DatagramPacket(Data, 0, Data.length, new InetSocketAddress(this.toip, this.toport));//InetSocketAddress类创建一个目标地址,并将得到的socket作为数据包的发送链接
                this.socket.send(packet);
                String ques = new String(Data, 0, Data.length);
                if (!ques.trim().equals("bye")) {
                    continue;
                }//加trim去掉空格。

                this.socket.close();
            } catch (Exception var5) {
                var5.printStackTrace();
            }

            return;
        }
    }
}

学生类和教师类,创建两个线程,分别为发送和接受。

package chats;

public class talkstudent {
    public talkstudent() {
    }

    public static void main(String[] args) {
        (new Thread(new talksend(7777, "localhost", 9999))).start();//向9999端口发送
        (new Thread(new talkreceive(8888, "老师"))).start();//在8888端口接收
    }
}

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package chats;

public class talkteacher {
    public talkteacher() {
    }

    public static void main(String[] args) {
        (new Thread(new talksend(5555, "localhost", 8888))).start();//向8888端口发送
        (new Thread(new talkreceive(9999, "学生"))).start();//在9999端口接受.
    }
}

附:
java通过URL类,下载网络资源。
首先可以通过网络抓包的方式,获取目标视频或音乐的url的值。
先创建一个URL对象,之后通过openconnection方法创建连接,由于大多数网站使用https协议,将其进行强制类型转换为HttpURLConnection,万物皆为流,使用inputStream读取http连接,在使用FileOutputStream将内容下载到指定的文件位置。

package URLtest;

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

public class URLtest {
    public static void main(String[] args) throws Exception{
        URL url=new URL("https://m701.music.126.net/20210908204202/62ad2629c5959aa955d40bbe360fb3fd/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/10534066865/ec0a/9bbc/3590/b4d04ce9553a85b39d002fbdfa1938e1.m4a");
        HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();//强转
        InputStream inputStream=httpURLConnection.getInputStream();
        FileOutputStream fos=new FileOutputStream("b4d04ce9553a85b39d002fbdfa1938e1.m4a");
        byte[] bytes=new byte[1024];
        int len;
        while((len=inputStream.read(bytes))!=-1){
            fos.write(bytes,0,bytes.length);
        }
        fos.close();
        inputStream.close();
        httpURLConnection.disconnect();
    }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:44:27  更:2021-09-14 13:45:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 1:59:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码