Java实现一个简单的命令行聊天程序

2023-11-16

Socket编程

Java实现

客户端

package net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class TalkClient {

    public static void main(String[] args) {
        try
        {
            Socket socket = new Socket("127.0.0.1",4701); //127.0.0.1表示客户端的ip地址
            BufferedReader sin = new BufferedReader(new
                    InputStreamReader(System.in)); //读取键盘输入
            PrintWriter os = new PrintWriter(socket.getOutputStream()); //向服务器端输出
            BufferedReader is = new BufferedReader(new
                    InputStreamReader(socket.getInputStream())); //从服务器端接收输入流
            String readline;
            readline = sin.readLine(); //键盘首先输入一行
            while(!readline.equals("bye")) 
            {
                os.println(readline); //输出到服务器端
                os.flush();
                System.out.println("Client:"+readline); //打印客户端的信息
                System.out.println("Server:"+is.readLine()); //打印服务器端的回信
                readline = sin.readLine(); //继续接收键盘输入
            }
            os.close();
            is.close();
            socket.close();
        }
        catch(Exception e)
        {
            System.out.println("Error"+e);
        }
    }
}

服务器端

package net;
import java.io.*;
import java.net.*;
public class TalkServer {

    public static void main(String[] args) {
        try
        {
            ServerSocket server = null; //初始化一个ServerSocket对象
            try
            {
                server = new ServerSocket(4701); //建立端口号4701
            }
            catch(Exception e)
            {
                System.out.println("can not listen to:"+e);
            }
            Socket socket = null; //服务器的socket
            try
            {
                socket = server.accept(); 
                //服务器等待来自接收端的socket情况,然后返回一个socket对象,如果没有接收端请求连接,就一直运行
            }
            catch(Exception e)
            {
                System.out.println("Error:"+e);
            }
            //下面这些原理跟客户端实现一样
            String line;
            BufferedReader is = new BufferedReader(new
                    InputStreamReader(socket.getInputStream()));
            PrintWriter os = new PrintWriter(socket.getOutputStream());
            BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Client:"+is.readLine());
            line = sin.readLine();
            while(!line.equals("bye"))
            {
                os.println(line);
                os.flush();
                System.out.println("Server:"+line);
                System.out.println("Client:"+is.readLine());
                line = sin.readLine();
            }
            os.close();
            is.close();
            socket.close();
            server.close();
        }
        catch(Exception e) 
        {
            System.out.println("Error:"+e);
        }
    }
}

下面看一下如何用命令行来运行这两个程序

NQt3sP.png

基本步骤就是

  1. 到达这两个文件的根目录
  2. 使用javac xxx.java编译这两个文件生成对应的class文件
  3. 如果你是直接在一个文件夹下拷贝这两个文件,那直接使用命令java xxx(注意,这里没有后缀.class,但是运行的是class文件)
  4. 如果你是使用eclipse来保存这两个文件,这两个文件应该会被保存到src目录下,这时候你就要按图片上的来运行class文件(编译文件的话要到文件根目录),不然可能会报错,图片上的方式就是到达src目录下,java 下级目录.xxx 文件
  5. 注意,这只是一个简单的程序,只能够接收一条发送一条
  6. 要使用两个命令行窗口来运行
  7. 如果运行TalkServer.class文件报错,可能是端口号已经被使用了,可以换一个端口号,注意不要时要1~1024的端口号,其他的端口号随便用

参考:

,只能够接收一条发送一条
6. 要使用两个命令行窗口来运行
7. 如果运行TalkServer.class文件报错,可能是端口号已经被使用了,可以换一个端口号,注意不要时要1~1024的端口号,其他的端口号随便用

参考:

清华大学Java课程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java实现一个简单的命令行聊天程序 的相关文章

随机推荐

  • 【AutoJs】AutoJs实现手势模拟,点击,滑动操作

    autojs在android7以上系统支持了一些手势模拟操作 可以是基于控件也可以是基于指定屏幕坐标的 本文主要介绍基于坐标的几个手势模拟方法 1 坐标自适应 在介绍手势模拟方法前先介绍一个可根据屏幕分辨率的变化 自适应调整坐标的方法 假如
  • MATLAB从数组中以等概率随机选出不同的元素

    问题 数组a 长度为n 要求以等概率随机从a中选出m个元素 各元素不能来自相同位置 解答 用randperm函数 rand index randperm n 将序号随机排列 draw rand index rand index 1 m 取出
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 地图兴趣点搜索三(ES相关性得分参数调整)

    1 问题回顾 前面第一章 我们介绍了地图兴趣点检索的基本流程 以及如何用elasticsearch ik搭建一个简单的demo 在运行demo时我们用 通州区万达广场 去搜索 结果排第一位的结果竟然是位于朝阳区的 建国路万达广场 第二章 我
  • VsCode提示“TypeScript intellisense is disabled on template.”警告

    问题描述 在Vscode中使用Volar插件开发Vue3 TypeScript时 在vue文件的template标签上提示警告字样 警告全文 TypeScript intellisense is disabled on template T
  • C++创建对象加括号和不加括号的区别

    1 一个类或者是有构造函数的对象 类名 对象名 gt 默认调用 对象名 这个构造函数 在栈中存在对象名 在堆中存在实际对象 类名 对象名 一个以上参数 gt 默认调用对应的构造函数 在栈中存在对象名 在堆中存在实际对象 类名 对象名 gt
  • USB BC充电协议探究——单片机实现

    USB BC充电协议探究 单片机实现 随着移动设备的普及 充电需求也越来越多样化 其中 USB充电方式被广泛应用 而BC Battery Charging 充电协议是其中最常用的一种 本文将详细介绍BC充电协议的工作原理 并给出基于单片机的
  • Base64编码知识记录

    目录 编码说明 编码方式 体积增大 等号 demo 编码说明 Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法 由于 2 6 64 所以每 6 个比特为一个单元 对应某个可打印字符 Base64 常用于在通常处理文本数
  • cublas中的矩阵运算

    Cublas是一个可以与cuda一同使用的函数库 它提供了多种矩阵运算的API 但是它列主序的存储方式却让人十分疑惑 今天我就以cublas中的矩阵乘法运算简单说一下我的理解 Cublas中的矩阵乘法运算函数有5个 分别是cublasSge
  • Java快速入门

    Java快速入门 Java概述 JDK介绍下载安装 入门程序HelloWorld JDK JRE 跨平台 Java程序执行原理 1 人机交互 1 1 什么是cmd 就是在windows操作系统中 利用命令行的方式去操作计算机 我们可以利用c
  • lego ev3 c语言编程,乐高 EV3 高级编程 – 第一课:安装

    我的学生写的教程 英文版的 好吧 我翻译一下 先介绍一下我的学生 今年 12 岁 2018年 普通 2 等中学初中 2 年级 学校名字就不说了 说了你也没听过 除了数学和科学比较好 其他科目成绩一般 学习电脑编程 3 年 大概每星期学 2
  • echarts使用API查看新增商品数量

    echarts使用API查看新增商品数量 echarts官网 http echarts baidu com index html 帮助文档 http echarts baidu com api html echarts 下载地址 http
  • 前后端分离 个人博客系统 (源码)

    该项目为个人博客系统 相对较为简单 比较适合新手学习 博客分为前台与后台 以三更博客为内容 前台展示页面 导航栏包括首页 分类 赞赏 友联 右下部分展示热门文章及浏览次数 文章详情页 可在底部进行评论 以及显示浏览量 友联 也可以进行评论
  • 项目范围和项目范围管理

    项目的范围包括项目的最终产品或服务以及实现该产品或服务所需要开始的各项具体工作 1 项目产品范围 项目所要生产的产品或服务的特征和功能 2 项目工作范围 项目范围管理是指为了成功完成项目 对项目工作包括什么与不包括什么的定义与控制过程 项目
  • python实现md5加密

    python实现MD5加密 1 简介 Message Digest Algorithm MD5 中文名为消息摘要算法第五版 为计算机安全领域广泛使用的一种散列函数 用于确保信息传输完整一致 MD5是单向加密 指只能加密数据而不能解密数据 主
  • 【FAQ】TheBrain最新最热问答集锦

    TheBrain是一款与众不同的思维导图软件 其所有信息通过一个又一个的节点进行联系 最终形成一个杂而不乱的网状结构 TheBrain功能亮点 数字思维 整合分散的资源 随时访问 快速搜索 强大的文档管理功能 一目了然的图形 最新版TheB
  • 去阿里面试到第三轮的时候,会如何360度无死角考察你?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 1 业务背景介绍 2 架构演进考察 3 对公司底层技术的原理考察 4 系统难点的考察 5 擅长技术的考察 6 总结 这篇文章 给大家分享一个同学面试阿里某个部门
  • 回归分析的基本步骤与自相关性

    一个回归分析的步骤 1 用scat x y 查看散点图 2 使用适当的模型进行回归分析 ls 估计出参数 3 统计检验 包括拟合优度检验和模型显著性检验 4 时间序列数据要做自相关性分析 横截面数据做异方差性检验 4 检查是否有多重共线性
  • Linux环境Ubuntu源码部署odoo15

    部署之前首先升级apt 否则所有的包都无法获取 sudo apt get update PostgreSQL相关 安装数据库 sudo apt get install postgresql 安装数据库客户端 sudo apt get ins
  • Java实现一个简单的命令行聊天程序

    Socket编程 Java实现 客户端 package net import java io BufferedReader import java io InputStreamReader import java io PrintWrite