我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java基于TCP如何实现简单聊天程序

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java基于TCP如何实现简单聊天程序

本篇内容介绍了“Java基于TCP如何实现简单聊天程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、如何实现TCP通信

要实现TCP通信需要创建一个服务器端程序和一个客户端程序,为了保证数据传输的安全性,首先需要实现服务器端程序,然后在编写客户端程序。

在本机运行服务器端程序,在远程机运行客户端程序

本机的IP地址:192.168.129.222

Java基于TCP如何实现简单聊天程序

远程机的IP地址:192.168.214.213

Java基于TCP如何实现简单聊天程序

二、编写C/S架构聊天程序

1.编写服务器端程序 - Server.java

在net.hw.network包里创建Server类

Java基于TCP如何实现简单聊天程序

package net.hw.network;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server extends JFrame {    static final int PORT = 8136;    static final String HOST_IP = "192.168.129.222";    private JPanel panel1, panel2;    private JTextArea txtContent, txtInput, txtInputIP;    private JScrollPane panContent, panInput;    private JButton btnClose, btnSend;    private ServerSocket serverSocket;    private Socket socket;    private DataInputStream netIn;    private DataOutputStream netOut;    public static void main(String[] args) {        new Server();    }    public Server() {        super("服务器");        //创建组件        panel1 = new JPanel();        panel2 = new JPanel();        txtContent = new JTextArea(15, 60);        txtInput = new JTextArea(3, 60);        panContent = new JScrollPane(txtContent, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);        panInput = new JScrollPane(txtInput, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);        btnClose = new JButton("关闭");        btnSend = new JButton("发送");        //添加组件        getContentPane().add(panContent, "Center");        getContentPane().add(panel1, "South");        panel1.setLayout(new GridLayout(0, 1));        panel1.add(panInput);        panel1.add(panel2);        panel2.add(btnSend);        panel2.add(btnClose);        //设置组件属性        txtContent.setEditable(false);        txtContent.setFont(new Font("宋体", Font.PLAIN, 13));        txtInput.setFont(new Font("宋体", Font.PLAIN, 15));        txtContent.setLineWrap(true);        txtInput.setLineWrap(true);        txtInput.requestFocus();        setSize(450, 350);        setLocation(50, 200);        setResizable(false);        setVisible(true);        //等候客户请求        try {            txtContent.append("服务器已启动...\n");            serverSocket = new ServerSocket(PORT);            txtContent.append("等待客户请求...\n");            socket = serverSocket.accept();            txtContent.append("连接一个客户。\n" + socket + "\n");            netIn = new DataInputStream(socket.getInputStream());            netOut = new DataOutputStream(socket.getOutputStream());        } catch (IOException e1) {            e1.printStackTrace();        }        /        //注册监听器,编写事件代码        txtContent.addMouseMotionListener(new MouseMotionAdapter() {            public void mouseMoved(MouseEvent e) {                displayClientMsg();            }        });        txtInput.addMouseMotionListener(new MouseMotionAdapter() {            public void mouseMoved(MouseEvent e) {                displayClientMsg();            }        });        panel2.addMouseMotionListener(new MouseMotionAdapter() {            public void mouseMoved(MouseEvent e) {                displayClientMsg();            }        });        txtInput.addKeyListener(new KeyAdapter() {            public void keyTyped(KeyEvent e) {                displayClientMsg();            }        });        txtInput.addFocusListener(new FocusAdapter() {            public void focusGained(FocusEvent e) {                displayClientMsg();            }        });        btnSend.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                try {                    String serverMsg = txtInput.getText();                    if (!serverMsg.trim().equals("")) {                        txtContent.append("服务器>" + serverMsg + "\n");                        netOut.writeUTF(serverMsg);                    } else {                        JOptionPane.showMessageDialog(null, "不能发送空信息!", "服务器", JOptionPane.WARNING_MESSAGE);                    }                    txtInput.setText("");                    txtInput.requestFocus();                } catch (IOException ie) {                    ie.printStackTrace();                }            }        });        btnClose.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent arg0) {                try {                    netIn.close();                    netOut.close();                    socket.close();                    serverSocket.close();                } catch (IOException e) {                    e.printStackTrace();                }                System.exit(0);            }        });        addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                try {                    netIn.close();                    netOut.close();                    socket.close();                    serverSocket.close();                } catch (IOException ie) {                    ie.printStackTrace();                }                System.exit(0);            }            public void windowActivated(WindowEvent e) {                txtInput.requestFocus();            }        });    }    //显示客户端信息    void displayClientMsg() {        try {            if (netIn.available() > 0) {                String clientMsg = netIn.readUTF();                txtContent.append("客户端>" + clientMsg + "\n");            }        } catch (IOException e1) {            e1.printStackTrace();        }    }}

2.编写客户端程序 - Client.java

在net.hw.network包里创建Client类

Java基于TCP如何实现简单聊天程序

package net.hw.network;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.InetAddress;import java.net.Socket;public class Client extends JFrame {    private JPanel panel1, panel2;    private JTextArea txtContent, txtInput;    private JScrollPane panContent, panInput;    private JButton btnClose, btnSend;    private Socket socket;    private DataInputStream netIn;    private DataOutputStream netOut;    public static void main(String[] args) {        new Client();    }    public Client() {        super("客户端");        //创建组件        panel1 = new JPanel();        panel2 = new JPanel();        txtContent = new JTextArea(15, 60);        txtInput = new JTextArea(3, 60);        panContent = new JScrollPane(txtContent, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);        panInput = new JScrollPane(txtInput, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);        btnClose = new JButton("关闭");        btnSend = new JButton("发送");        //添加组件        getContentPane().add(panContent, "Center");        getContentPane().add(panel1, "South");        panel1.setLayout(new GridLayout(0, 1));        panel1.add(panInput);        panel1.add(panel2);        panel2.add(btnSend);        panel2.add(btnClose);        //设置组件属性        txtContent.setEditable(false);        txtContent.setFont(new Font("宋体", Font.PLAIN, 13));        txtInput.setFont(new Font("宋体", Font.PLAIN, 15));        txtContent.setLineWrap(true);        txtInput.setLineWrap(true);        txtInput.requestFocus();        setSize(450, 350);        setLocation(550, 200);        setResizable(false);        setVisible(true);        //连接服务器        try {            txtContent.append("连接服务器...\n");            socket = new Socket(Server.HOST_IP, Server.PORT);            txtContent.append("连接服务器成功。\n" + socket + "\n");            netIn = new DataInputStream(socket.getInputStream());            netOut = new DataOutputStream(socket.getOutputStream());        } catch (IOException e1) {            JOptionPane.showMessageDialog(null, "服务器连接失败!\n请先启动服务器程序!", "客户端", JOptionPane.ERROR_MESSAGE);            System.exit(1);        }        /        //注册监听器,编写事件代码        txtContent.addMouseMotionListener(new MouseMotionAdapter() {            public void mouseMoved(MouseEvent e) {                displayServerMsg();            }        });        txtInput.addMouseMotionListener(new MouseMotionAdapter() {            public void mouseMoved(MouseEvent e) {                displayServerMsg();            }        });        panel2.addMouseMotionListener(new MouseMotionAdapter() {            public void mouseMoved(MouseEvent e) {                displayServerMsg();            }        });        txtInput.addKeyListener(new KeyAdapter() {            public void keyTyped(KeyEvent e) {                displayServerMsg();            }        });        txtInput.addFocusListener(new FocusAdapter() {            public void focusGained(FocusEvent e) {                displayServerMsg();            }        });        btnSend.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                try {                    String clientMsg = txtInput.getText();                    if (!clientMsg.trim().equals("")) {                        netOut.writeUTF(clientMsg);                        txtContent.append("客户端>" + clientMsg + "\n");                    } else {                        JOptionPane.showMessageDialog(null, "不能发送空信息!", "客户端", JOptionPane.WARNING_MESSAGE);                    }                    txtInput.setText("");                    txtInput.requestFocus();                } catch (IOException ie) {                    ie.printStackTrace();                }            }        });        btnClose.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                try {                    netIn.close();                    netOut.close();                    socket.close();                } catch (IOException ie) {                    ie.printStackTrace();                }                System.exit(0);            }        });        addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                try {                    netIn.close();                    netOut.close();                    socket.close();                } catch (IOException ie) {                    ie.printStackTrace();                }                System.exit(0);            }            public void windowActivated(WindowEvent e) {                txtInput.requestFocus();            }        });    }    //显示服务端信息    void displayServerMsg() {        try {            if (netIn.available() > 0) {                String serverMsg = netIn.readUTF();                txtContent.append("服务器>" + serverMsg + "\n");            }        } catch (IOException e1) {            e1.printStackTrace();        }    }}

3.测试服务器端与客户端能否通信

在本机[192.168.129.222]上启动服务器端

Java基于TCP如何实现简单聊天程序

在远程机[192.168.214.213]上启动客户端

Java基于TCP如何实现简单聊天程序

显示连接服务器[192.168.129.222]成功,切换到服务器端查看,显示连接了一个客户[192.168.214.213]

Java基于TCP如何实现简单聊天程序

此时,服务器端和客户端就可以相互通信了

Java基于TCP如何实现简单聊天程序

4.程序优化思路 - 服务器端采用多线程

其实,很多服务器端程序都是允许被多个应用程序访问的,例如门户网站可以被多个用户同时访问,因此服务器端都是多线程的。

Java基于TCP如何实现简单聊天程序

“Java基于TCP如何实现简单聊天程序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java基于TCP如何实现简单聊天程序

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

下载Word文档

猜你喜欢

Java基于TCP如何实现简单聊天程序

本篇内容介绍了“Java基于TCP如何实现简单聊天程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、如何实现TCP通信要实现TCP通信需
2023-06-29

java NIO怎么实现简单聊天程序

这篇文章主要为大家展示了“java NIO怎么实现简单聊天程序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java NIO怎么实现简单聊天程序”这篇文章吧。具体内容如下服务端功能:1、接受客户
2023-06-21

微信小程序如何实现简单聊天室

这篇文章主要介绍了微信小程序如何实现简单聊天室的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序如何实现简单聊天室文章都会有所收获,下面我们一起来看看吧。cha.js// pages/chat/chat.
2023-06-08

python实现简单的聊天小程序

概要 这是一个使用python实现一个简单的聊天室的功能,里面包含群聊,私聊两种聊天方式.实现的方式是使用套接字编程的一个使用TCP协议 c/s结构的聊天室 实现思路 x01 服务端的建立 首先,在服务端,使用socket进行消息的接受,每
2022-06-02

如何使用C#基于Socket的TCP通信实现聊天室

这篇文章给大家分享的是有关如何使用C#基于Socket的TCP通信实现聊天室的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下一.Socket(套接字)通信概念套接字(socket)是通信的基石,用于描述
2023-06-29

Java网络编程TCP如何实现聊天功能

这篇文章主要为大家展示了“Java网络编程TCP如何实现聊天功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java网络编程TCP如何实现聊天功能”这篇文章吧。客户端:package com.
2023-06-20

如何利用C++实现一个简单的聊天室程序?

如何利用C++实现一个简单的聊天室程序?在信息时代,人们越来越注重网络交流。而聊天室作为一种常见的沟通工具,具有实时性和交互性的特点,被广泛应用于各个领域。本文将介绍如何利用C++语言实现一个简单的聊天室程序。首先,我们需要建立一个基于客户
如何利用C++实现一个简单的聊天室程序?
2023-11-04

C#基于TCP如何实现简单游戏客户端

本篇内容介绍了“C#基于TCP如何实现简单游戏客户端”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、界面左上方播放音频按钮和停止播放下面是
2023-06-21

怎么用python实现简单的聊天小程序

这篇文章主要讲解了“怎么用python实现简单的聊天小程序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用python实现简单的聊天小程序”吧!概要这是一个使用python实现一个简单的
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录