【0】README
1)本文旨在实现 利用网络套接字实现类似qq 的控制台通讯, client 采用telnet and java app, server采用 java app;
2)also, you can check out the source code from https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/chapter3/qq_resembled
3)本代码的问题不足在于 没有实现 server 发送到 多个 client 的 socket 连接,即,server 发送的消息属于群发,而不是 peer to peer  的 发送,如果需要完成这个工作的话,需要 socket 连接池,对于每个 client 都建立相应的 socket,即建立相应的 OutputStream and InputStream;
4)编译本代码,可能会报错(错误:找不到符号),解决方法参见: http://blog.csdn.net/pacosonswjtu/article/details/51804636
【1】server by java app
public class ServerPlainTest {public static void main(String[] args) {try {ServerSocket ss = new ServerSocket(8189);System.out.println("the server has startuped, waiting for connections.");while (true) { // accept multiple clients connection request.Socket s = ss.accept();System.out.println("a client has connected successfully.");new Thread(new ReceiveHandler(s, Role.SERVER)).start();new Thread(new SendHandler(s, Role.SERVER)).start();}} catch (Exception e) {System.out.println(e);}}
}
public class MessageHandler {
}// receive msg.
class ReceiveHandler implements Runnable {private Socket socket;private Role role;public ReceiveHandler(Socket socket, Role role) {this.socket = socket;this.role = role;     }public void run() {try {System.out.println(role + " executes ReceiveHandler.run method.");InputStream is = socket.getInputStream();Scanner in = new Scanner(is);// echo client inputboolean done = false;while (!done && in.hasNextLine()) {String line = in.nextLine();System.out.println(line);if (line.trim().equalsIgnoreCase("bye")) {done = true;}}// close relative instance.in.close();} catch (IOException e) {e.printStackTrace();} }
}// send msg.
class SendHandler implements Runnable {private Socket socket;private Role role;public SendHandler(Socket socket, Role role) {this.socket = socket;this.role = role;       }public void run() {PrintWriter pw = null;try {System.out.println(role + " executes SendHandler.run method.");Scanner s = new Scanner(System.in);OutputStream os = socket.getOutputStream();pw = new PrintWriter(os, true); // autoFlush=true.if (role.equals(Role.SERVER)) {pw.println("from server: you've connected with the server.");}while (s.hasNext()) {String line = s.nextLine();pw.println("from " + role + ": " + line);}pw.println("connection closed successfully. bye!");} catch (Exception e) {e.printStackTrace();}  }
}
【2】client by java app
1)source code is as following
public class ClientPlainTest {public static void main(String[] args) {Socket s = null;try {s = new Socket("localhost", 8189);System.out.println("connection with the server successfully.");new Thread(new ReceiveHandler(s, Role.CLIENT)).start();new Thread(new SendHandler(s, Role.CLIENT)).start();} catch (Exception e) {System.out.println(e);} }
}
2)console info:

【3】client by telnet (connect with server by telnet localhost 8189)

java_advanced_review(3)补充:利用网络套接字实现类似qq 的控制台通讯相关推荐

  1. 【Linux】网络套接字编程

    前言 在掌握一定的网络基础,我们便可以先从代码入手,利用UDP协议/TCP协议进行编写套接字程序,明白网络中服务器端与客户端之间如何进行连接并且通信的. 目录 一.了解源目的IP.端口.网络字节序.套 ...

  2. 【Linux】网络基础+UDP网络套接字编程

    只做自己喜欢做的事情,不被社会和时代裹挟着前进,是一件很奢侈的事. 文章目录 一. 网络基础 1.局域网和广域网 2.协议初识和网络协议分层(TCP/IP四层模型) 3.MAC地址和IP地址(子网掩码 ...

  3. 什么是网络套接字(Socket)?

    什么是网络套接字(Socket)?一时还真不好回答,而且网络上也有各种解释,莫衷一是.下文将以本人所查阅到的资料来说明一下什么是Socket. Socket定义 Socket在维基百科的定义: A n ...

  4. 从入门到入土:基于C语言采用UDP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统|代码展示

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  5. 从入门到入土:基于C语言采用TCP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  6. linux篇【12】:网络套接字<前序>—网络基础+udp套接字

    目录 一.网络基础 1.认识 "协议" 举例: 2.协议分层 (1)软件分层 (2)协议分层 3.OSI七层模型 4.TCP/IP五层(或四层)模型 5.网络和操作系统之间的关系 ...

  7. Java Socket:飞鸽传书的网络套接字

    在古代,由于通信不便利,一些聪明的人就利用鸽子会飞且飞得比较快.会辨认方向的优点,对其进行了驯化,用来进行消息的传递--也就是所谓的"飞鸽传书".而在 Java 中,网络套接字(S ...

  8. 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )

    文章目录 前言 一.SOCKET 网络套接字初始化 二.SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息 三.SOCKET 网络套接 向远程端 ( Android 模拟器 ) ...

  9. 网络套接字(Network socket)

    网络套接字(英语:Network socket:又译网络套接字.网络接口.网络插槽)在计算机科学中是电脑网络中进程间资料流的端点.使用以网际协议(Internet Protocol)为通信基础的网络套 ...

最新文章

  1. vector,数组,动态数组效率测试
  2. c# point偏移_GMap.NET开发技巧(四)-GPS百度地图坐标偏移及地图加偏和逆向纠偏解决方法和代码...
  3. jquery学习手记(1)
  4. C/C++函数调用的几种方式总结
  5. 命名空间_python基础 13 类命名空间于对象、实例的命名空间,组合方法
  6. 为CEDIT添加有颜色的边框
  7. 在Android Studio中将Android工程变为Library使用
  8. 历时两年,微软物联网安全服务 Azure Sphere 全面上线!
  9. 二分查找算法(Java版)
  10. 学习笔记(1):JDBC连接池
  11. 《人工智能》机器学习 - 第1章 机器学习简介
  12. ERP系统功能之生产管理
  13. sumifs两个求和列如何计算_SUMIFS多条件求和,基本使用方法讲解
  14. python自动办公pdf_python自动化办公之 Python 解析 PDF
  15. html暴风粒子代码,魔兽世界课物品代码及gm指令大全(全部整理自网上).doc
  16. 创建数据库失败((Microsoft.SqlServer.Smo))执行Transact-SQL语句或批处理时发生了异常。
  17. Python格式化JSON文件
  18. Oracle 数据库 简单操作命令(新手看 可以收藏哟)
  19. libgdx 图形绘制
  20. 水安ABC考试多选练习题库(7)

热门文章

  1. Codeforces Round #610 (Div. 2) D. Enchanted Artifact 交互 + 思维
  2. CF372D. Choosing Subtree is Fun
  3. [ZJOI2007]矩阵游戏
  4. CF1580B Mathematics Curriculum(笛卡尔树、树形dp)
  5. bzoj2226-[Spoj5971]LCMSum【欧拉函数,GCD】
  6. POJ3468-A Simple Problem with Integers【线段树,树状数组,分块】
  7. 【DP】建学校问题(luogu 2803/2018 特长生 T3)
  8. CF526G Spiders Evil Plan(树上最优性问题、倍增+线段树)
  9. vue.js 接收url参数
  10. 推荐系统常用的推荐算法