iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >巧妙利用java实现在线聊天系统教程方法
  • 583
分享到

巧妙利用java实现在线聊天系统教程方法

java服务器servlet 2023-09-03 21:09:45 583人浏览 安东尼
摘要

一、搭建服务器端 a)、创建ServerSocket对象绑定监听端口。 b)、通过accept()方法监听客户端的请求。 c)、建立连接后,通过输入输出流读取客户端发送的请求信息。 d)、通过输出流向

一、搭建服务器

a)、创建ServerSocket对象绑定监听端口。
b)、通过accept()方法监听客户端的请求。
c)、建立连接后,通过输入输出流读取客户端发送的请求信息。
d)、通过输出流向客户端发送请求信息。
e)、关闭相关资源。

二、搭建客户器端

a)、创建Socket对象,指明需要连接的服务器的地址和端口。
b)、建立连接后,通过输出流向服务器发送请求信息。
c)、通过输入流获取服务器的响应信息。
d)、关闭响应资源

代码展示
服务器端代码:

import java.io.DatainputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;


public class ChatSeverEdition3 {
// 服务器端是否启动
boolean started = false;
ServerSocket serverSocket = null;
ArrayList clients = new ArrayList();

public static void main(String[] args) {    new ChatSeverEdition3().start();}public void start() {    try {        serverSocket = new ServerSocket(8888);        started = true;    } catch (BindException e) {        // 多次启动服务器        System.out.println("端口使用中。。。。");        System.out.println("请关掉相关程序,并重新运行服务器!");        System.exit(0);    } catch (IOException e) {        e.printStackTrace();    }    try {        while (started) {            // 客户端是否连接            Socket socket = serverSocket.accept();            // main()方法是static方法,不能在其中new动态类Client            Client client = new Client(socket);            // 线程启动            new Thread(client).start();            // 将当前启动的客户端保存下来            clients.add(client);            System.out.println("new Client成功!");            System.out.println("A Client connected!");        }    } catch (IOException e) {        e.printStackTrace();    } finally {        try {            serverSocket.close();        } catch (IOException e) {            e.printStackTrace();        }    }}class Client implements Runnable {    private Socket s;    private DataInputStream dis = null;    private boolean bConnected = false;    private DataOutputStream dos;    public Client(Socket s) {        this.s = s;        try {            dis = new DataInputStream(s.getInputStream());            dos = new DataOutputStream(s.getOutputStream());            bConnected = true;            System.out.println("有一个新的客户端程序在运行");        } catch (IOException e) {            e.printStackTrace();        }        // 一个客户端连接成功以后,一直在执行该while部分的代码,其他客户端无法连接            }    public void sendString(String str) {        try {            dos.writeUTF(str);        } catch (IOException e) {            clients.remove(this);            System.out.println("对方退出了!!!我从List中去掉了!!!");        }    }    public void run() {        Client client = null;        // 注意这部分的包围关系        try {            while (bConnected) {                String string = dis.readUTF();                System.out.println(string);                for (int i = 0; i < clients.size(); i++) {                    client = clients.get(i);                    client.sendString(string);                }            }        } catch (EOFException e) {            System.out.println("Client closed!");        } catch (IOException e) {            e.printStackTrace();            System.exit(0);        } finally {            try {                if (dis != null) {                    dis.close();                }                if (s != null) {                    s.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }}

}
客户端代码:

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;


public class ChatClientEdition3 extends Frame {
TextField tfText = new TextField();
TextArea taContent = new TextArea();
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
private boolean bConnected = false;

public static void main(String[] args) {    new ChatClientEdition3().launchFrame();}// 加载窗口public void launchFrame() {    setLocation(400, 300);    this.setSize(300, 300);    this.setTitle("在线聊天时--Quiana");    add(tfText, BorderLayout.SOUTH);    add(taContent, BorderLayout.NORTH);    pack();    // 窗口关闭的时间监听    this.addWindowListener(new WindowAdapter() {        @Override        public void windowClosing(WindowEvent e) {            disconnect();            System.exit(0);        }    });    tfText.addActionListener(new TFListener());    this.setVisible(true);    connect();    new Thread(new RecvThread()).start();}// 文字处理的时间监听private class TFListener implements ActionListener {    // 敲击回车时,文字的变化事件    @Override    public void actionPerfORMed(ActionEvent arg0) {        String s = tfText.getText().trim(); // 去掉两端的空格        tfText.setText("");        try {            dataOutputStream.writeUTF(s);            dataOutputStream.flush();        } catch (IOException e) {            e.printStackTrace();        }    }}// 连接到服务器public void connect() {    try {        // 连接到服务器        socket = new Socket("127.0.0.1", 8888);        bConnected = true;        dataOutputStream = new DataOutputStream(socket.getOutputStream());        dataInputStream = new DataInputStream(socket.getInputStream());        System.out.println("连接到服务器!!!");    } catch (BindException e) {        e.printStackTrace();    } catch (UnknownHostException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}// 断开连接public void disconnect() {    try {        dataOutputStream.close();        System.out.println("dataOutputStream成功关闭");        socket.close();        System.out.println("客户端socket成功关闭");    } catch (IOException e) {        e.printStackTrace();    }}private class RecvThread implements Runnable {    public void run() {        try {            while (bConnected) {                String string = dataInputStream.readUTF();                if (taContent.getText().length() == 0) {                    taContent.setText(string);                } else {                    taContent.setText(taContent.getText() + "\n" + string);                }            }        } catch (SocketException e) {            System.out.println("退出了,拜拜!");        } catch (EOFException e) {            System.out.println("退出了,拜拜!");        } catch (IOException e) {            e.printStackTrace();        }    }}

}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

来源地址:https://blog.csdn.net/qq_52010446/article/details/130081882

--结束END--

本文标题: 巧妙利用java实现在线聊天系统教程方法

本文链接: https://www.lsjlt.com/news/392871.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 巧妙利用java实现在线聊天系统教程方法
    一、搭建服务器端 a)、创建ServerSocket对象绑定监听端口。 b)、通过accept()方法监听客户端的请求。 c)、建立连接后,通过输入输出流读取客户端发送的请求信息。 d)、通过输出流向...
    99+
    2023-09-03
    java 服务器 servlet
  • java实现在线聊天系统
    本文实例为大家分享了java实现在线聊天系统的具体代码,供大家参考,具体内容如下 本博客是博主在观看相关视频后写下的代码,希望能够帮助大家掌握java socket的相关知识。 原理...
    99+
    2024-04-02
  • 多线程网络实现在线聊天系统(详细源码)
    这篇博客整理自韩顺平老师的多线程网络学习,在Java基础中最难的就是多线程以及网络编程了,如果不太熟悉的小伙伴可以跟着课程学习,韩老师讲得很详细,缺点就是太详细有点墨迹。实现后的效果是在一个类似命令行窗口进行聊天,网页版的聊天项目后续我也会...
    99+
    2023-08-30
    网络 java
  • PHP中怎么利用WebSocket实现一个在线聊天通讯系统
    今天就跟大家聊聊有关PHP中怎么利用WebSocket实现一个在线聊天通讯系统,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。新建WebSocket....
    99+
    2024-04-02
  • Java网络编程UDP实现多线程在线聊天
    本文实例为大家分享了Java实现多线程在线聊天的具体代码,供大家参考,具体内容如下 上一篇博客通过UDP实现了聊天,但只能单方面发送消息,这次实现了多线程在线聊天,也就是可以双方互发...
    99+
    2024-04-02
  • 怎么在Java中利用网络编程模拟在线聊天
    本篇文章为大家展示了怎么在Java中利用网络编程模拟在线聊天,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、前提知识需要知道简单的IO流操作,以及简单的UDP发送数据包的原理。需要用到的类:Dat...
    99+
    2023-06-15
  • C++ SOCKET多线程实现聊天小程序的方法
    本篇内容主要讲解“C++ SOCKET多线程实现聊天小程序的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ SOCKET多线程实现聊天小程序的方法”吧!本文实例为大家分享了C++ SO...
    99+
    2023-06-20
  • 基于UDP协议实现聊天系统的方法
    这篇文章给大家分享的是有关基于UDP协议实现聊天系统的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码展示下面展示一些 Client类。class Client extends ...
    99+
    2023-06-14
  • nodejs中怎么利用websocket实现一个实时聊天系统
    nodejs中怎么利用websocket实现一个实时聊天系统,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。client.html:<!D...
    99+
    2024-04-02
  • 怎么在android中利用Socket实现一个聊天小程序
    本篇文章为大家展示了怎么在android中利用Socket实现一个聊天小程序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体内容如下服务器端:package org.hwq.echo; impo...
    99+
    2023-05-31
    android socket roi
  • 怎么用Java Socket+多线程实现多人聊天室功能
    这篇文章主要讲解了“怎么用Java Socket+多线程实现多人聊天室功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java Socket+多线程实现多人聊天室功能”吧!思路简介分...
    99+
    2023-06-20
  • Java实战在线选课系统的实现流程
    一、项目简述 功能: 系统分为三个角色。最高权限管理员,学生,教师,包括 学生管理,教师管理,课程管理,选课,退课,成绩查 询。,教学课程,查看选课名单等等功能完全齐备。 二、项目运...
    99+
    2024-04-02
  • Java线程同步:实现多线程协作的方法与技巧
    在Java中,多线程编程是非常常见的,但是在多线程编程中,线程之间的同步是一个非常关键的问题。同步是指多个线程在执行过程中,能够协调和互相配合,以达到正确的执行结果。否则,会出现数据不一致、死锁等问题,影响程序的正确性和性能。 本文将介绍...
    99+
    2023-11-09
    同步 numy 日志
  • Java实战之课程在线学习系统的实现
    目录一、前言项目介绍项目运行二、效果图展示三、核心代码用户管理控制层角色管理控制层课程管理控制层一、前言 项目介绍 采用SpringBoot+Spring+Mybatis+Thyel...
    99+
    2024-04-02
  • 怎么在java中利用Runnable实现一个线程
    怎么在java中利用Runnable实现一个线程?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用...
    99+
    2023-06-14
  • Java线程池的简单使用方法实例教程
    目录线程池使用场景? Java线程池使用总结线程池使用场景? java中经常需要用到多线程来处理一些业务,我们非常不建议单纯使用继承Thread或者实现Runnable接口...
    99+
    2024-04-02
  • 如何使用Java SSM实现在线点餐系统
    小编给大家分享一下如何使用Java SSM实现在线点餐系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!介绍项目编号:BS-PT-022本项目基于SSM...
    99+
    2023-06-29
  • Java 实战项目之在线点餐系统的实现流程
    一、项目简述 功能包括: 在线点餐,评论,购物车,下单,支付,管理员,店家多 商家管理,后台评论管理,订单管理,商品管理等等。 二、项目运行 环境配置: Jdk1.8 + Tomca...
    99+
    2024-04-02
  • Java实战项目之在线点餐系统的实现流程
    一、项目简述 功能包括: 前台实现:用户浏览菜单、菜品分类筛选、查看菜单详 情、添加购物车、购物车结算、会员券、个人订单查询等 等。 后台实现:餐系管理、菜品管理、订单管理、系统管理...
    99+
    2024-04-02
  • 如何在java利用tostring方法实现重写
    今天就跟大家聊聊有关如何在java利用tostring方法实现重写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。当需要将一个对象输出到显示器时,通常要调用他的toString()方法...
    99+
    2023-05-31
    java tostring ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作