Java---利用程序实现在控制台聊天
一.普通版(不能实现随意输入)
电脑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---利用程序实现在控制台聊天相关推荐
- JAVA利用websocket实现多人聊天室、私信(附源码)
声明:此文为原创,转载请声明出处! 小编曾在毕业设计中用到了聊天室这个功能,现在稍作整理分享一下,希望能对大家有所帮助,有不足之处请指出 在学习websocket前,首先得知道它的一些基本操作,可参考 ...
- java多线程聊天室_【Java】Socket+多线程实现控制台聊天室
另:具体代码实现已移植github: https://github.com/ygj0930/Chat-Room-in-Java ,大家fork之余记得给我个star呀~ 聊天室程序的结构图: 架构解 ...
- Java小程序简易多客户端聊天服务器
前言 最近在上JAVA课时学习了多线程有关知识,结合之前的练习,自己试着写了个多客户端聊天器.现放在这里,希望能对各位同袍有所帮助. 注意为了防止抄袭,以下仅放出Client和Server部分.对于信 ...
- Java网络编程以及简单的聊天程序
网络编程技术是互联网技术中的主流编程技术之一,懂的一些基本的操作是非常必要的.这章主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件. 全部代码下载:链接 1.网络编 ...
- 【Java】Socket多客户端Client-Server聊天程序
文章目录 任务要求 实现代码 工具类 服务器端线程 客户端线程 服务器端程序 客户端程序 运行说明 任务要求 编写一个简单的Socket多客户端聊天程序: 客户端程序,从控制台输入字符串,发送到服务器 ...
- 《Java项目实践》:简单聊天程序
<Java项目实践>:简单聊天程序 由于这个简单程序,还是涉及到很多的知识点,下面我们就一点一点的来完成. 我们熟悉的QQ聊天,就有一个界面,是吧,我们自己做一个简单的聊天程序,因此我们也 ...
- Java黑皮书课后题第2章:2.1(将摄氏温度转换为华氏温度)编写程序,从控制台读入double型的摄氏温度值,将其转为华氏温度,显示结果
2.1(将摄氏温度转换为华氏温度)从控制台读入double型的摄氏温度值,将其转为华氏温度 题目 题目概述 破题 代码块 方法评价 注意问题 控制台读入数据的代码顺序 控制台读取数据的代码理解 修改日 ...
- cometd_CometD:Java Web应用程序的Facebook类似聊天
cometd 聊天就像吃一块蛋糕或喝一杯热咖啡一样容易. 您是否曾经考虑过自己开发聊天程序? 您知道,聊天不容易. 但是,如果您是开发人员,并且阅读了本文的最后部分,则可以尝试自行开发一个聊天应用程序 ...
- CometD:Java Web应用程序的Facebook类似聊天
聊天就像吃一块蛋糕或喝一杯热咖啡一样容易. 您是否曾经考虑过自己开发聊天程序? 您知道,聊天不容易. 但是,如果您是开发人员,并且阅读了本文的结尾,则可以尝试自己开发一个聊天应用程序,并允许您的用户通 ...
最新文章
- Js控制样式的诸多方法
- php读写分离数据不能同步,thinkphp 下数据库读写分离代码剖析
- 数字光端机和模拟视频光端机的六个不同点
- sql 为什么要用where 1=1或者where 1 =0 ?
- Spring tx:advice/
- 电脑上玩 Google纵横
- 小老弟,来爬取携程的民宿酒店数据啦(附带源码)
- VS2012连接数据库问题
- 浅谈各种连接池中连接数量的设置
- 常用的php.ini 配置选项
- 如何选择网页更新提醒工具
- Google浏览器Chrome,永久开启flash支持的办法
- 实对称矩阵一定可以对角化
- 纯真IP/ZXinc_IPv6数据库镜像及MySQL脚本更新同步更新 for Python 3.x
- pycharm永久激活
- 内外网安全文件摆渡如何实现自动化?
- 关于谷歌浏览器的禁止autoplay政策 - Kaiqisan
- LVGL8学习之Background Styles
- HTML + js 播放amr音频文件
- 排序算法——冒泡排序(JavaPython)
热门文章
- linux c 禁止对外通信,Linux C套接字:在recv调用时被阻止
- html table vtop,PART2HTML语言.doc
- JAVA随机生成文件名:当前年月日时分秒+五位随机数
- 指针、引用以及const限定符、constexpr限定符
- C++:39---继承中构造函数、析构函数的关系
- ncnn网络框架使用指南
- TensorFlow(3)-与训练相关的操作
- 机器学习中的聚类方法总结
- QT5生成.exe文件时,出现缺少QT5core.dll文件解决方法
- std::chrono::duration_cast时间计算