iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java网络编程怎么实现多线程聊天
  • 437
分享到

Java网络编程怎么实现多线程聊天

2023-06-20 13:06:30 437人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关Java网络编程怎么实现多线程聊天,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。聊天程序如果是单线程,会导致没人只能说一句,并且说了以后,必须等到另一个人的回复,才能说第二句。

这篇文章将为大家详细讲解有关Java网络编程怎么实现多线程聊天,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

聊天程序如果是单线程,会导致没人只能说一句,并且说了以后,必须等到另一个人的回复,才能说第二句。收发都在主线程中,不能同时进行。

解决方法:

将收发放到两个不同的线程

SendThread 发送消息线程
2. RecieveThread 接受消息线程
3. Server一旦接受到连接,就启动收发两个线程
4. Client 一旦建立了连接,就启动收发两个线程

多线程聊天

1 SendThread

package Socket;import java.io.DataOutputStream;import java.io.IOException;import java.io.OutputStream;import java.net.Socket;import java.util.Scanner;public class SendThread extends Thread {    private Socket s;    public SendThread(Socket s) {        this.s = s;    }    @Override    public void run() {        try {            OutputStream os = s.getOutputStream();            DataOutputStream dos = new DataOutputStream(os);            while(true){                Scanner sc = new Scanner(System.in);                String str = sc.next();                dos.writeUTF(str);            }        } catch (IOException e) {            e.printStackTrace();        }    }}

2 RecieveThread

package socket;import java.io.DatainputStream;import java.io.IOException;import java.io.InputStream;import java.net.Socket;public class RecieveThread extends Thread {    private Socket s;    public RecieveThread(Socket s) {        this.s = s;    }    @Override    public void run() {        InputStream is = null;        try {            is = s.getInputStream();            DataInputStream dis = new DataInputStream(is);            while(true){                String msg = dis.readUTF();                System.out.println(msg);            }        } catch (IOException e) {            e.printStackTrace();        }    }}

3 Server

package socket;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server {    public static void main(String[] args) {        try {            ServerSocket ss = new ServerSocket(8888);            System.out.println("监听端口号:8888");            Socket s = ss.accept();            new SendThread(s).start();            new RecieveThread(s).start();        } catch (IOException e) {            e.printStackTrace();        }    }}

4 Client

package socket;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;public class Client {    public static void main(String[] args) {        try {            Socket s = new Socket("127.0.0.1", 8888);            new SendThread(s).start();            new RecieveThread(s).start();        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}

简单对话框

Server

package socket;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextArea;import javax.swing.JTextField;public class GUIServer {    public static void main(String[] args) throws Exception {        JFrame f = new JFrame();        f.setTitle("server");        f.setSize(400, 300);        f.setLocation(100, 200);        f.setLayout(null);        JButton b = new JButton("send");        b.setBounds(10, 10, 80, 30);        f.add(b);        final JTextField tf = new JTextField();        tf.setBounds(10, 110, 80, 30);        f.add(tf);        final JTextArea ta = new JTextArea();        ta.setBounds(110,10, 200, 300);        f.add(ta);        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        f.setVisible(true);        ServerSocket ss = new ServerSocket(8888);        System.out.println("listenning on port:8888");        final Socket s =  ss.accept();                new Thread() {            public void run() {                while (true) {                    try {                        DataInputStream dis = new DataInputStream(                                s.getInputStream());                        String text = dis.readUTF();                        ta.append(text+"\r\n");                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }        }.start();        b.addActionListener(new ActionListener() {            @Override            public void actionPerfORMed(ActionEvent e) {                String text = tf.getText();                ta.append(text+"\r\n");                try {                    DataOutputStream dos = new DataOutputStream(                            s.getOutputStream());                    dos.writeUTF(text);                } catch (Exception ex) {                    ex.printStackTrace();                }            }        });    }}

Client

package socket;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextArea;import javax.swing.JTextField;public class GUIClient {    public static void main(String[] args) throws Exception {        JFrame f = new JFrame();        f.setTitle("client");        f.setSize(400, 300);        f.setLocation(600, 200);        f.setLayout(null);        JButton b = new JButton("send");        b.setBounds(10, 10, 80, 30);        f.add(b);        final JTextField tf = new JTextField();        tf.setBounds(10, 110, 80, 30);        f.add(tf);        final JTextArea ta = new JTextArea();        ta.setBounds(110,10, 200, 300);        f.add(ta);        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        f.setVisible(true);        final Socket s = new Socket("127.0.0.1", 8888);        new Thread() {            public void run() {                while (true) {                    try {                        DataInputStream dis = new DataInputStream(                                s.getInputStream());                        String text = dis.readUTF();                        ta.append(text+"\r\n");                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }        }.start();        b.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                String text = tf.getText();                ta.append(text+"\r\n");                try {                    DataOutputStream dos = new DataOutputStream(                            s.getOutputStream());                    dos.writeUTF(text);                } catch (Exception ex) {                    ex.printStackTrace();                }            }        });    }}

关于“Java网络编程怎么实现多线程聊天”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Java网络编程怎么实现多线程聊天

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

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

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

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

下载Word文档
猜你喜欢
  • Java网络编程怎么实现多线程聊天
    这篇文章将为大家详细讲解有关Java网络编程怎么实现多线程聊天,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。聊天程序如果是单线程,会导致没人只能说一句,并且说了以后,必须等到另一个人的回复,才能说第二句。...
    99+
    2023-06-20
  • Java网络编程实现多线程聊天
    本文实例为大家分享了Java网络编程实现多线程聊天的具体代码,供大家参考,具体内容如下 聊天程序如果是单线程,会导致没人只能说一句,并且说了以后,必须等到另一个人的回复,才能说第二句...
    99+
    2022-11-12
  • Java网络编程UDP实现多线程在线聊天
    本文实例为大家分享了Java实现多线程在线聊天的具体代码,供大家参考,具体内容如下 上一篇博客通过UDP实现了聊天,但只能单方面发送消息,这次实现了多线程在线聊天,也就是可以双方互发...
    99+
    2022-11-12
  • 基于Java网络编程和多线程的多对多聊天系统
    目录1.前言2.类图3.代码1.前言 程序实现基于星型结构(服务器接收来自各个客户端发送的信息,然后将信息传递给其他客户端界面并在其他客户端界面显示发送的信息) 2.类图 3.代...
    99+
    2022-11-12
  • Java网络编程TCP实现聊天功能
    网络编程TCP实现聊天的前提还需要掌握IO流,话不多说,直接上代码! 客户端: package com.kuang.lesson02; import java.io.IOExc...
    99+
    2022-11-12
  • Java实现多线程聊天室
    本文实例为大家分享了Java实现多线程聊天室的具体代码,供大家参考,具体内容如下 之前呢已经用单线程的方式来实现了聊天室,但其实它的功能并不齐全,下面用多线程来实现,功能会比单线程聊...
    99+
    2022-11-12
  • C++基于socket多线程实现网络聊天室
    本文实例为大家分享了C++基于socket多线程实现网络聊天室的具体代码,供大家参考,具体内容如下 1. 实现图解 2. 聊天室服务端:TCP_Server_Chat.cpp ...
    99+
    2022-11-12
  • Java编写网络聊天程序实验
    本文实例为大家分享了Java编写网络聊天程序的具体代码,供大家参考,具体内容如下 课程名称 高级Java程序设计 实验项目 Java网络编程 实验目的: 使用客户机/服务器模式、基于...
    99+
    2022-11-13
    Java网络聊天程序 Java网络聊天 Java聊天程序
  • Java网络编程实例——简单模拟在线聊天
    目录1、前提知识 2、实现思路: 1、前提知识 需要知道简单的IO流操作,以及简单的UDP发送数据包的原理。 需要用到的类:DatagramSocket、DatagramPacke...
    99+
    2022-11-12
  • Java多线程局域网聊天室的实现
    目录1.TCP2.套接字3.C/S架构4.多线程5.服务器客户端局域网聊天室 在学习了一个学期的java以后,觉得java真是博大精深,彻底放弃了因为c++而轻视java的心态,搞了...
    99+
    2022-11-12
  • 怎么在Java中利用网络编程模拟在线聊天
    本篇文章为大家展示了怎么在Java中利用网络编程模拟在线聊天,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、前提知识需要知道简单的IO流操作,以及简单的UDP发送数据包的原理。需要用到的类:Dat...
    99+
    2023-06-15
  • 多线程网络实现在线聊天系统(详细源码)
    这篇博客整理自韩顺平老师的多线程网络学习,在Java基础中最难的就是多线程以及网络编程了,如果不太熟悉的小伙伴可以跟着课程学习,韩老师讲得很详细,缺点就是太详细有点墨迹。实现后的效果是在一个类似命令行窗口进行聊天,网页版的聊天项目后续我也会...
    99+
    2023-08-30
    网络 java
  • Java网络编程之简易聊天室的实现
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:运行客户端,连接服务器。 二、解题思路 首先需要启动上题的ServerSocketFrame服务,这样客户端运行时,才...
    99+
    2022-11-13
    Java实现简易聊天室 Java 聊天室
  • Java网络编程TCP如何实现聊天功能
    这篇文章主要为大家展示了“Java网络编程TCP如何实现聊天功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java网络编程TCP如何实现聊天功能”这篇文章吧。客户端:package ...
    99+
    2023-06-20
  • Java网络编程UDP实现消息发送及聊天
    TCP可以实现聊天,UDP也可以实现消息发送及聊天。不同的是,TCP需要有服务端和客户端的连接,但UDP不需要,只需要有发送方和接收方即可。 一、实现消息发送 发送方: pack...
    99+
    2022-11-12
  • Java多线程实现多人聊天室功能
    本文为大家分享了Java多线程实现多人聊天室功能的具体代码,供大家参考,具体内容如下 1.实验目的: 编写一个 Java 应用程序,实现图形界面多人聊天室(多线程实现),要求聊天室窗...
    99+
    2022-11-12
  • java实现多人聊天工具(socket+多线程)
    大一下学期的java期末课程设计:java实现多人聊天工具,分享一下 课设要求 多人聊天工具 服务器要求1:能够看到所有在线用户(25%) 服务器要求2:能够强制用...
    99+
    2022-11-12
  • C++ SOCKET多线程怎么实现聊天小程序
    本篇内容介绍了“C++ SOCKET多线程怎么实现聊天小程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!TCP/IP协议与SOCKET什么...
    99+
    2023-06-08
  • 怎么用Java Socket+多线程实现多人聊天室功能
    这篇文章主要讲解了“怎么用Java Socket+多线程实现多人聊天室功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java Socket+多线程实现多人聊天室功能”吧!思路简介分...
    99+
    2023-06-20
  • 怎么用Java创建多线程局域网聊天室
    这篇文章主要讲解了“怎么用Java创建多线程局域网聊天室”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java创建多线程局域网聊天室”吧!局域网聊天室在学习了一个学期的java以后,觉...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作