简单的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控制台聊天室实现相关推荐

  1. java的同步关键字_简单了解Java synchronized关键字同步

    简单了解Java synchronized关键字同步 发布于 2021-1-13| 复制链接 摘记:  synchronized synchronized可以用来同步块,同步方法.同步块可以用来更精确 ...

  2. java类成员初始化_简单了解Java类成员初始化顺序

    这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...

  3. java完成九宫格数独_简单实现java数独游戏

    本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下 打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用... 数独代码是在之 ...

  4. Java抽号系统_简单实现java抽奖系统

    简单实现java抽奖系统 发布于 2020-3-11| 复制链接 摘记: 本文为大家分享了java抽奖系统的具体代码,供大家参考,具体内容如下用户信息类 ```java /* * 用户信息类 * 1. ...

  5. java xmlrpc2.0 实现_简单的java xmlrpc

     简单的 XMLRPC java---XmlRpcClient package com.company; import org.apache.xmlrpc.XmlRpcClient; import ...

  6. java编译时注解_简单介绍 Java 中的编译时注解

    1. 前言 上一篇 主要介绍了什么是 注解 (Annotation) 以及如何读取 运行时注解 中的数据, 同时用注解实现了简单的 ORM 功能. 这次介绍另一部分: 如何读取 编译时注解 ( Ret ...

  7. java 打印ascii字符串_简单使用JAVA打印纯ASCII字符构成的酷图效果

    简单地编写一个读取"ASCII-兔.txt"文件的java代码,如下所示: import java.io.BufferedReader; import java.io.File; ...

  8. java catch中抛出异常_简单了解Java编程中抛出异常的方法

    任何Java代码都可以抛出异常,如:自己编写的代码.来自Java开发环境包中代码,或者Java运行时系统.无论是谁,都可以通过Java的throw语句抛出异常.从方法中抛出的任何异常都必须使用thro ...

  9. java midi没有声音_简单的Java MIDI示例不产生任何声音

    这个简单的代码在我用来测试的几台机器上没有产生任何声音.我正在Eclipse中运行代码,但我也尝试过使用命令行无济于事. public static void main(String[] args) ...

  10. java 不定长参数_简单介绍Java的不定长度参数

    本文版权归作者所有,仅供用来网上学习来用,读者可以收藏,请不要下载到本机和重新发布到其它网站 先看两个简单的例子,来感受一下Java的不定长度参数 第一个例子: public class VariAr ...

最新文章

  1. 移除IIS默认的响应头
  2. Python爬虫开发
  3. 添加tomcat7插件设置jdk编译版本
  4. python地图 两点距离_没学过还真不会!怎样才能画出准确的地图?
  5. 第二节 CSS入门介绍
  6. 如何在 webpack 项目中使用绝对路径
  7. 用本地计算机做服务器提供外网访问:花生壳+tomcat
  8. 什么是入侵检测系统?有哪些分类?
  9. Windows下jmeter使用
  10. MIT赵选贺再发《Nature Biomedical Engineering》​!
  11. python中dumps是什么意思_python中的dumps和loads区别
  12. 计算机早期科学家起源,月球起源说
  13. 百度云盘不限速下载工具(附带开源源码)
  14. 2017年全球最有影响力的50家机器人公司排行榜
  15. Zend Studio的常用配置和使用方法
  16. 树莓派+USB摄像头自制网络摄像头
  17. java s1 s2 s3 s4_电源管理中的S0 S1 S2 S3 S4 S5
  18. 江西财经大学计算机科学与工程,江西财经大学-软件与物联网工程学院
  19. SAP MM 公司代码间质检库存的STO (II)
  20. 赫迈泽牵手苹果Homekit,预定中国智能家居用户1.75亿?

热门文章

  1. php 0xc0000135,php 错误代码 0xc0000135是什么情况
  2. windows文件保护提示解决方法
  3. 使用java对pdf文档进行分解和合成
  4. Win32多语言IME应用程序编程接口(API)
  5. Uncode-Schedule首页、文档和下载 - 分布式任务调度组件 - 开源中国社区
  6. 实战中,利用10日均线捕捉主升浪,必须满足这四个条件!
  7. 服务器设置防火墙网站打不开,部分网站打不开如何处理?
  8. js获取今天剩余时间_骚姿势获取无线路由器后台权限
  9. 乘法鉴相器的matlab仿真,Matlab中基于dq变换的锁相环仿真研究
  10. mysql杀死锁死的进程_如何杀死MySQL进程