一.普通版(不能实现随意输入)

电脑A(服务器端)

package day;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;public class Mysever {public static void main(String[] args) {//服务器端 IP 172.16.242.163  PORT: 5566//Socket 插头//ServerSocket 插座try {ServerSocket ss = new ServerSocket(5566);Socket server = ss.accept();Scanner sca = new Scanner(System.in);//服务器发信息while (true) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = sdf.format(new Date());System.out.println("请client发言:");String msg = sca.nextLine();String info = String.format("Server[%s]:%s\r\n", time, msg);server.getOutputStream().write(info.getBytes());//接受信息byte[] buf = new byte[2012];server.getInputStream().read(buf);String read = new String(buf);System.out.println(read);}} catch (Exception e) {e.printStackTrace();}}
}

电脑B(客户端)

import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;public class Mynet {public static void main(String[] args) {try{Scanner san = new Scanner(System.in);Socket client = new Socket("172.16.242.163",5566);while(true) {byte[] buf = new byte[2048];client.getInputStream().read(buf);System.out.println(new String(buf));//收信息SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = sdf.format(new Date());System.out.print("给service回话:");String msg = san.nextLine();String info = String.format("Client[%s]:%s\r\n", time, msg);client.getOutputStream().write(info.getBytes());//发信息}}catch(Exception e){e.printStackTrace();}}}

二.升级版(可以随意聊天)利用多线程

服务器端

package day;import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;public class MySend implements Runnable {private OutputStream os;public MySend(OutputStream os) {this.os = os;}@Overridepublic void run() {while(true){Scanner sc = new Scanner(System.in);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = sdf.format(new Date());System.out.print("给用户发言:");String msg = sc.nextLine();String info = String.format("Server[%s]:%s\r\n", time, msg);try {this.os.write(info.getBytes());this.os.flush();}catch(Exception e){e.printStackTrace();}}}
}-------------------------------------------------------------------------------------------------package day;import java.io.InputStream;public class MyRead implements Runnable {private InputStream is;public MyRead(InputStream is){this.is = is;}@Overridepublic void run() {while(true){//接收信息byte[] buf = new byte[2014];try {this.is.read(buf);System.out.println(new String(buf));}catch(Exception e){e.printStackTrace();}}}
}
--------------------------------------------------------------------------------------------------package day;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;//service 服务器端
public class Servertext {public static void main(String[] args) {try {ServerSocket ss = new ServerSocket(5566);Socket server = ss.accept();new Thread(new MySend(server.getOutputStream())).start();new Thread(new MyRead(server.getInputStream())).start();} catch (IOException e) {e.printStackTrace();}}
}
//多个用户怎么办
/*list<Socket> sss = new ArrayList<Socket>();while(true){Socket server = ss.accept();sss.add(server);}*/

用户端

package day;import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;public class MySend implements Runnable {private OutputStream os;public MySend(OutputStream os) {this.os = os;}@Overridepublic void run() {while(true){Scanner sc = new Scanner(System.in);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = sdf.format(new Date());System.out.print("给服务器发言:");String msg = sc.nextLine();String info = String.format("Client[%s]:%s\r\n", time, msg);try {this.os.write(info.getBytes());this.os.flush();}catch(Exception e){e.printStackTrace();}}}
}-------------------------------------------------------------------------------------------------package day;import java.io.InputStream;public class MyRead implements Runnable {private InputStream is;public MyRead(InputStream is){this.is = is;}@Overridepublic void run() {while(true){//接收信息byte[] buf = new byte[2014];try {this.is.read(buf);System.out.println(new String(buf));}catch(Exception e){e.printStackTrace();}}}
}
--------------------------------------------------------------------------------------------------
package day;

import java.net.Socket;//client 客户端public class Text {    public static void main(String[] args) {        try{            Socket client = new Socket("172.16.242.163",5566);            new Thread(new MySend(client.getOutputStream())).start();            new Thread(new MyRead(client.getInputStream())).start();        }catch (Exception e){            e.printStackTrace();        }    }}

转载于:https://www.cnblogs.com/zxwen/p/9673602.html

Java---利用程序实现在控制台聊天相关推荐

  1. JAVA利用websocket实现多人聊天室、私信(附源码)

    声明:此文为原创,转载请声明出处! 小编曾在毕业设计中用到了聊天室这个功能,现在稍作整理分享一下,希望能对大家有所帮助,有不足之处请指出 在学习websocket前,首先得知道它的一些基本操作,可参考 ...

  2. java多线程聊天室_【Java】Socket+多线程实现控制台聊天室

    另:具体代码实现已移植github: https://github.com/ygj0930/Chat-Room-in-Java  ,大家fork之余记得给我个star呀~ 聊天室程序的结构图: 架构解 ...

  3. Java小程序简易多客户端聊天服务器

    前言 最近在上JAVA课时学习了多线程有关知识,结合之前的练习,自己试着写了个多客户端聊天器.现放在这里,希望能对各位同袍有所帮助. 注意为了防止抄袭,以下仅放出Client和Server部分.对于信 ...

  4. Java网络编程以及简单的聊天程序

    网络编程技术是互联网技术中的主流编程技术之一,懂的一些基本的操作是非常必要的.这章主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件. 全部代码下载:链接 1.网络编 ...

  5. 【Java】Socket多客户端Client-Server聊天程序

    文章目录 任务要求 实现代码 工具类 服务器端线程 客户端线程 服务器端程序 客户端程序 运行说明 任务要求 编写一个简单的Socket多客户端聊天程序: 客户端程序,从控制台输入字符串,发送到服务器 ...

  6. 《Java项目实践》:简单聊天程序

    <Java项目实践>:简单聊天程序 由于这个简单程序,还是涉及到很多的知识点,下面我们就一点一点的来完成. 我们熟悉的QQ聊天,就有一个界面,是吧,我们自己做一个简单的聊天程序,因此我们也 ...

  7. Java黑皮书课后题第2章:2.1(将摄氏温度转换为华氏温度)编写程序,从控制台读入double型的摄氏温度值,将其转为华氏温度,显示结果

    2.1(将摄氏温度转换为华氏温度)从控制台读入double型的摄氏温度值,将其转为华氏温度 题目 题目概述 破题 代码块 方法评价 注意问题 控制台读入数据的代码顺序 控制台读取数据的代码理解 修改日 ...

  8. cometd_CometD:Java Web应用程序的Facebook类似聊天

    cometd 聊天就像吃一块蛋糕或喝一杯热咖啡一样容易. 您是否曾经考虑过自己开发聊天程序? 您知道,聊天不容易. 但是,如果您是开发人员,并且阅读了本文的最后部分,则可以尝试自行开发一个聊天应用程序 ...

  9. CometD:Java Web应用程序的Facebook类似聊天

    聊天就像吃一块蛋糕或喝一杯热咖啡一样容易. 您是否曾经考虑过自己开发聊天程序? 您知道,聊天不容易. 但是,如果您是开发人员,并且阅读了本文的结尾,则可以尝试自己开发一个聊天应用程序,并允许您的用户通 ...

最新文章

  1. Js控制样式的诸多方法
  2. php读写分离数据不能同步,thinkphp 下数据库读写分离代码剖析
  3. 数字光端机和模拟视频光端机的六个不同点
  4. sql 为什么要用where 1=1或者where 1 =0 ?
  5. Spring tx:advice/
  6. 电脑上玩 Google纵横
  7. 小老弟,来爬取携程的民宿酒店数据啦(附带源码)
  8. VS2012连接数据库问题
  9. 浅谈各种连接池中连接数量的设置
  10. 常用的php.ini 配置选项
  11. 如何选择网页更新提醒工具
  12. Google浏览器Chrome,永久开启flash支持的办法
  13. 实对称矩阵一定可以对角化
  14. 纯真IP/ZXinc_IPv6数据库镜像及MySQL脚本更新同步更新 for Python 3.x
  15. pycharm永久激活
  16. 内外网安全文件摆渡如何实现自动化?
  17. 关于谷歌浏览器的禁止autoplay政策 - Kaiqisan
  18. LVGL8学习之Background Styles
  19. HTML + js 播放amr音频文件
  20. 排序算法——冒泡排序(JavaPython)

热门文章

  1. linux c 禁止对外通信,Linux C套接字:在recv调用时被阻止
  2. html table vtop,PART2HTML语言.doc
  3. JAVA随机生成文件名:当前年月日时分秒+五位随机数
  4. 指针、引用以及const限定符、constexpr限定符
  5. C++:39---继承中构造函数、析构函数的关系
  6. ncnn网络框架使用指南
  7. TensorFlow(3)-与训练相关的操作
  8. 机器学习中的聚类方法总结
  9. QT5生成.exe文件时,出现缺少QT5core.dll文件解决方法
  10. std::chrono::duration_cast时间计算