千家信息网

如何用Java创建多线程局域网聊天室

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇"如何用Java创建多线程局域网聊天室"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这
千家信息网最后更新 2025年01月23日如何用Java创建多线程局域网聊天室

这篇"如何用Java创建多线程局域网聊天室"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"如何用Java创建多线程局域网聊天室"文章吧。

1.TCP

要实现局域网连接,就必须知道信息传输的原理。
在局域网里面传输的信息都是以包的形式,我使用的TCP包传输数据,TCP包里面封装了IP报文。
下面这句话就是通过一个静态IPV4协议的类得到一个服务器的IP地址。

address = InetAddress.getByName("192.168.43.86");

2.套接字

在TCP中得到了服务器的IP地址,但是光凭IP地址无法对具体应用进行锁定,所以引入了套接字这个概念。端口号用来锁定主机的进程。端口号一般取1024~49151,因为0 ~ 1023是熟知端口号,一般用于一些HTTP等等常用的端口,49152 ~ 65535是临时端口号,也不能随机占用,一般是程序运行过程中的临时分配。
套接字=IP+端口号
这句话就是定义一个端口号9998和IP为192.168.43.86的套接字。

int port = 9998;socket = new Socket(address,port);

3.C/S架构

从Java类的角度看,服务器和客户端通过套接字连接抽象了一个连接。服务器通过建立自己的套接字端口并监听有无客户在此端口连接,实现信息的读取功能。客户机通过服务器约定好的端口号,来对服务器进行传输数据。在服务器开启后,运行客户机,将与服务器进行三次握手建立TCP连接,然后在此连接的基础上,实现客户机与服务器的通信。

4.多线程

由于服务器可能同时服务多个对象,若是采用传统的方法进行服务器连接,则会出现多个客户机等待一个客户机与服务器交互的现象。为了解决这个问题,采用多线程的方法。
用SuperSocket类继承socket类并实现Runnable接口,实现多线程运行。

class SuperSocket extends Socket implements Runnable
SuperSocket socket_1 = new SuperSocket(9999);SuperSocket socket_2 = new SuperSocket(9998);SuperSocket socket_3 = new SuperSocket(9997);Thread s1 = new Thread(socket_1);Thread s2 = new Thread(socket_2);Thread s3 = new Thread(socket_3);

5.服务器

服务器的架构第三部分所示,代码实现如下

package TCP;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;public class TCPserver2 {    public static void main(String[] args) {        Scanner scan = new Scanner(System.in);        //实例化具有多线程功能的服务器专用socket类        //需要传递端口号作为初始化变量        SuperSocket socket_1 = new SuperSocket(9996);        SuperSocket socket_2 = new SuperSocket(9998);        SuperSocket socket_3 = new SuperSocket(9997);        //建立三个子线程        Thread s1 = new Thread(socket_1);        Thread s2 = new Thread(socket_2);        Thread s3 = new Thread(socket_3);        try {            while(true) {                    //开启线程                s1.start();                s2.start();                s3.start();                if(scan.next()=="123"){                //结束线程                    break;                }            }        } finally {            try {            //关闭套接字                socket_1.close();                socket_2.close();                socket_3.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}class SuperSocket extends Socket implements Runnable{    InputStream is;    byte[] buffer;    Socket socket=null;    ServerSocket serverSocket=null;    public SuperSocket(int port){        try {        //初始服务器型套接字            serverSocket = new ServerSocket(port);            buffer = new byte[1024];        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    public void run() {        try {                //等待端口连接            socket = serverSocket.accept();            //连接完成后创建输入流            is = socket.getInputStream();            //读取客户端传送信息            int len = is.read(buffer);            String str = new String(buffer, 0, len);            System.out.println(str);        } catch (IOException e) {            e.printStackTrace();        }    }}

客户端

客户端的架构第三部分所示,代码实现如下

package TCP;import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;public class TCPclient {    public static void main(String[] args) {        InetAddress address=null;        Socket socket=null;        OutputStream os=null;        String message=null;        Scanner sca=null;        try {            //得到本机IP地址            address = InetAddress.getByName("192.168.43.86");            //规定端口号,建立套接字            int port = 9998;            socket = new Socket(address,port);            //绑定套接字的输出流            os = socket.getOutputStream();            sca = new Scanner(System.in);            while(true) {                message = sca.next();                //写入输出流,在局域网中传输                os.write(message.getBytes());            }        } catch (UnknownHostException e) {            e.printStackTrace();        }catch (IOException e) {            e.printStackTrace();        }finally {            try {            //关闭端口号,关闭io流                os.close();                socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

以上就是关于"如何用Java创建多线程局域网聊天室"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

服务 服务器 线程 口号 套接字 客户 局域 局域网 内容 客户机 传输 信息 地址 端口 聊天室 客户端 就是 架构 运行 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 在售最强服务器cpu 云服务器的流量怎么计算 软件开发工程师理解 c语言软件开发的工具有哪些 被遗忘网络安全吗 我国首部关于网络安全 计算机应用网络技术专业课程 海口创新服务器厂家供应 广州南沙新城互联网科技学校 a6记账软件无法连接服务器 view部署 数据库 数据库更改保存不了 网络技术在大数据中的重要 计算机网络技术包括应用 开展网络安全倡议新闻稿 写软件开发文档需要的材料 计算机网络技术的国企 吃鸡的服务器怎么安装 再读网络安全和信息化工作会议 宝山区节能软件开发密度 网络安全威胁研究 怎么验证新建的数据库连接 服务器的访问记录 张店包装软件开发咨询 安庆市网络安全办公室网站 高级网络技术分析课程 东南大学网络安全联盟 不能插入汉字到数据库表 服务器日常运行管理制度执行 数据库文件分离后还原不了
0