java 控制台聊天昵称_简单的java控制台聊天室实现
简单的socket编程+多线程;更多东西访问俺的博客啦啦啦,顺便求offer
http://blog.csdn.net/leejuen/
1.[代码]服务端
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Scanner;
public class ServerIM{
public static HashMap clientMap = new HashMap();
public static void main(String[] args) throws Exception
{
ServerSocket server = new ServerSocket(8888);
Socket client = null;
while(true)
{
System.out.println("等待客户端连接");
client = server.accept();
clientMap.put(client.getInetAddress().getHostAddress(), client);
new Thread(new ServerThread(client)).start();
}
}
}
class ServerThread implements Runnable
{
private Socket client = null;
private Socket client2 = null;
private String address2 = null;
public ServerThread(Socket client)
{
this.client = client;
}
public void run(){
// TODO Auto-generated method stub
try {
Scanner in = new Scanner(client.getInputStream());
PrintStream out = new PrintStream(client.getOutputStream());
System.out.println("客户端"+client.getInetAddress().getHostAddress()+"已经连接");
out.println("欢迎你是第"+ServerIM.clientMap.size()+"用户");
out.flush();
address2 = in.nextLine();
client2 = ServerIM.clientMap.get(address2);
if(client2==null)
{
out.println("你的小伙伴还没有上线请耐心等待");
while(client2 == null)
{
address2 = in.nextLine();
client2 = ServerIM.clientMap.get(address2);
}
}
out.println("您已成功和你的小伙伴连上线了你们可以开始通话了");
PrintStream out2 = new PrintStream(client2.getOutputStream());
while(true)
{
String call = in.nextLine();
System.out.println(client.getInetAddress().getHostAddress()+":"+call);
if("exit".equals(call)) break;
out2.println(client.getInetAddress().getHostAddress()+":"+call);
}
out2.println("再见");
System.out.println("客户端"+client.getInetAddress().getHostAddress()+"已经断开");
client.close();
client2.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.[代码]客户端
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class ClientIM {
public static void main(String[] args) throws Exception
{
//输入服务端主机ip地址
Socket client = new Socket("10.68.210.4",8888);
//发送数据给服务端流
PrintStream toServer = new PrintStream(client.getOutputStream());
PrintStream sout = new PrintStream(System.out);
//获取服务端数据流
Scanner getServer = new Scanner(client.getInputStream());
//控制台输入流
Scanner sin = new Scanner(System.in);
System.out.println("请输入你要通信的小伙伴的ip地址:");
/* 下面两句话目的是实现输入和刷新实时的作用,使得控制台输入不会阻塞*/
new Thread(new ClientScanner(sin, toServer)).start();
new Thread(new ClientScanner(getServer, sout)).start();
}
}
class ClientScanner implements Runnable
{
Scanner in;
PrintStream toServer;
public ClientScanner(Scanner in,PrintStream toServer)
{
this.in = in;
this.toServer = toServer;
}
public void run() {
// TODO Auto-generated method stub
while(in.hasNext())
{
toServer.println(in.nextLine());
}
}
}
java 控制台聊天昵称_简单的java控制台聊天室实现相关推荐
- java的同步关键字_简单了解Java synchronized关键字同步
简单了解Java synchronized关键字同步 发布于 2021-1-13| 复制链接 摘记: synchronized synchronized可以用来同步块,同步方法.同步块可以用来更精确 ...
- java类成员初始化_简单了解Java类成员初始化顺序
这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...
- java完成九宫格数独_简单实现java数独游戏
本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下 打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用... 数独代码是在之 ...
- Java抽号系统_简单实现java抽奖系统
简单实现java抽奖系统 发布于 2020-3-11| 复制链接 摘记: 本文为大家分享了java抽奖系统的具体代码,供大家参考,具体内容如下用户信息类 ```java /* * 用户信息类 * 1. ...
- java xmlrpc2.0 实现_简单的java xmlrpc
简单的 XMLRPC java---XmlRpcClient package com.company; import org.apache.xmlrpc.XmlRpcClient; import ...
- java编译时注解_简单介绍 Java 中的编译时注解
1. 前言 上一篇 主要介绍了什么是 注解 (Annotation) 以及如何读取 运行时注解 中的数据, 同时用注解实现了简单的 ORM 功能. 这次介绍另一部分: 如何读取 编译时注解 ( Ret ...
- java 打印ascii字符串_简单使用JAVA打印纯ASCII字符构成的酷图效果
简单地编写一个读取"ASCII-兔.txt"文件的java代码,如下所示: import java.io.BufferedReader; import java.io.File; ...
- java catch中抛出异常_简单了解Java编程中抛出异常的方法
任何Java代码都可以抛出异常,如:自己编写的代码.来自Java开发环境包中代码,或者Java运行时系统.无论是谁,都可以通过Java的throw语句抛出异常.从方法中抛出的任何异常都必须使用thro ...
- java midi没有声音_简单的Java MIDI示例不产生任何声音
这个简单的代码在我用来测试的几台机器上没有产生任何声音.我正在Eclipse中运行代码,但我也尝试过使用命令行无济于事. public static void main(String[] args) ...
- java 不定长参数_简单介绍Java的不定长度参数
本文版权归作者所有,仅供用来网上学习来用,读者可以收藏,请不要下载到本机和重新发布到其它网站 先看两个简单的例子,来感受一下Java的不定长度参数 第一个例子: public class VariAr ...
最新文章
- 移除IIS默认的响应头
- Python爬虫开发
- 添加tomcat7插件设置jdk编译版本
- python地图 两点距离_没学过还真不会!怎样才能画出准确的地图?
- 第二节 CSS入门介绍
- 如何在 webpack 项目中使用绝对路径
- 用本地计算机做服务器提供外网访问:花生壳+tomcat
- 什么是入侵检测系统?有哪些分类?
- Windows下jmeter使用
- MIT赵选贺再发《Nature Biomedical Engineering》​!
- python中dumps是什么意思_python中的dumps和loads区别
- 计算机早期科学家起源,月球起源说
- 百度云盘不限速下载工具(附带开源源码)
- 2017年全球最有影响力的50家机器人公司排行榜
- Zend Studio的常用配置和使用方法
- 树莓派+USB摄像头自制网络摄像头
- java s1 s2 s3 s4_电源管理中的S0 S1 S2 S3 S4 S5
- 江西财经大学计算机科学与工程,江西财经大学-软件与物联网工程学院
- SAP MM 公司代码间质检库存的STO (II)
- 赫迈泽牵手苹果Homekit,预定中国智能家居用户1.75亿?
热门文章
- php 0xc0000135,php 错误代码 0xc0000135是什么情况
- windows文件保护提示解决方法
- 使用java对pdf文档进行分解和合成
- Win32多语言IME应用程序编程接口(API)
- Uncode-Schedule首页、文档和下载 - 分布式任务调度组件 - 开源中国社区
- 实战中,利用10日均线捕捉主升浪,必须满足这四个条件!
- 服务器设置防火墙网站打不开,部分网站打不开如何处理?
- js获取今天剩余时间_骚姿势获取无线路由器后台权限
- 乘法鉴相器的matlab仿真,Matlab中基于dq变换的锁相环仿真研究
- mysql杀死锁死的进程_如何杀死MySQL进程