java_advanced_review(3)补充:利用网络套接字实现类似qq 的控制台通讯
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();} }
}
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);} }
}
java_advanced_review(3)补充:利用网络套接字实现类似qq 的控制台通讯相关推荐
- 【Linux】网络套接字编程
前言 在掌握一定的网络基础,我们便可以先从代码入手,利用UDP协议/TCP协议进行编写套接字程序,明白网络中服务器端与客户端之间如何进行连接并且通信的. 目录 一.了解源目的IP.端口.网络字节序.套 ...
- 【Linux】网络基础+UDP网络套接字编程
只做自己喜欢做的事情,不被社会和时代裹挟着前进,是一件很奢侈的事. 文章目录 一. 网络基础 1.局域网和广域网 2.协议初识和网络协议分层(TCP/IP四层模型) 3.MAC地址和IP地址(子网掩码 ...
- 什么是网络套接字(Socket)?
什么是网络套接字(Socket)?一时还真不好回答,而且网络上也有各种解释,莫衷一是.下文将以本人所查阅到的资料来说明一下什么是Socket. Socket定义 Socket在维基百科的定义: A n ...
- 从入门到入土:基于C语言采用UDP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统|代码展示
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- 从入门到入土:基于C语言采用TCP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- linux篇【12】:网络套接字<前序>—网络基础+udp套接字
目录 一.网络基础 1.认识 "协议" 举例: 2.协议分层 (1)软件分层 (2)协议分层 3.OSI七层模型 4.TCP/IP五层(或四层)模型 5.网络和操作系统之间的关系 ...
- Java Socket:飞鸽传书的网络套接字
在古代,由于通信不便利,一些聪明的人就利用鸽子会飞且飞得比较快.会辨认方向的优点,对其进行了驯化,用来进行消息的传递--也就是所谓的"飞鸽传书".而在 Java 中,网络套接字(S ...
- 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )
文章目录 前言 一.SOCKET 网络套接字初始化 二.SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息 三.SOCKET 网络套接 向远程端 ( Android 模拟器 ) ...
- 网络套接字(Network socket)
网络套接字(英语:Network socket:又译网络套接字.网络接口.网络插槽)在计算机科学中是电脑网络中进程间资料流的端点.使用以网际协议(Internet Protocol)为通信基础的网络套 ...
最新文章
- vector,数组,动态数组效率测试
- c# point偏移_GMap.NET开发技巧(四)-GPS百度地图坐标偏移及地图加偏和逆向纠偏解决方法和代码...
- jquery学习手记(1)
- C/C++函数调用的几种方式总结
- 命名空间_python基础 13 类命名空间于对象、实例的命名空间,组合方法
- 为CEDIT添加有颜色的边框
- 在Android Studio中将Android工程变为Library使用
- 历时两年,微软物联网安全服务 Azure Sphere 全面上线!
- 二分查找算法(Java版)
- 学习笔记(1):JDBC连接池
- 《人工智能》机器学习 - 第1章 机器学习简介
- ERP系统功能之生产管理
- sumifs两个求和列如何计算_SUMIFS多条件求和,基本使用方法讲解
- python自动办公pdf_python自动化办公之 Python 解析 PDF
- html暴风粒子代码,魔兽世界课物品代码及gm指令大全(全部整理自网上).doc
- 创建数据库失败((Microsoft.SqlServer.Smo))执行Transact-SQL语句或批处理时发生了异常。
- Python格式化JSON文件
- Oracle 数据库 简单操作命令(新手看 可以收藏哟)
- libgdx 图形绘制
- 水安ABC考试多选练习题库(7)
热门文章
- Codeforces Round #610 (Div. 2) D. Enchanted Artifact 交互 + 思维
- CF372D. Choosing Subtree is Fun
- [ZJOI2007]矩阵游戏
- CF1580B Mathematics Curriculum(笛卡尔树、树形dp)
- bzoj2226-[Spoj5971]LCMSum【欧拉函数,GCD】
- POJ3468-A Simple Problem with Integers【线段树,树状数组,分块】
- 【DP】建学校问题(luogu 2803/2018 特长生 T3)
- CF526G Spiders Evil Plan(树上最优性问题、倍增+线段树)
- vue.js 接收url参数
- 推荐系统常用的推荐算法