JDK8 网络Net包研究(二)

2023-11-17

完整的Socket 客户端 和 服务端实例代码

Client:

package lang.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class Client {
	public static final int port = 8080;
	public static final String host = "localhost";

	public static void main(String[] args) {
		System.out.println("Client Start...");
		while (true) {
			Socket socket = null;
			try {
				// 创建一个流套接字并将其连接到指定主机上的指定端口号
				socket = new Socket(host, port);

				// 读取服务器端数据
				BufferedReader input = new BufferedReader(
						new InputStreamReader(socket.getInputStream()));
				// 向服务器端发送数据
				PrintStream out = new PrintStream(socket.getOutputStream());
				System.out.print("请输入: \t");
				String str = new BufferedReader(
						new InputStreamReader(System.in)).readLine();
				out.println(str);

				String ret = input.readLine();
				System.out.println("服务器端返回过来的是: " + ret);
				// 如接收到 "OK" 则断开连接
				if ("OK".equals(ret)) {
					System.out.println("客户端将关闭连接");
					Thread.sleep(500);
					break;
				}

				out.close();
				input.close();
			} catch (Exception e) {
				System.out.println("客户端异常:" + e.getMessage());
			} finally {
				if (socket != null) {
					try {
						socket.close();
					} catch (IOException e) {
						socket = null;
						System.out.println("客户端 finally 异常:" + e.getMessage());
					}
				}
			}
		}
	}
}

Server:

package lang.socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public static final int port = 8080;// 监听的端口号
	private ServerSocket serverSocket;

	public static void main(String[] args) {
		System.out.println("Server...\n");
		Server server = new Server();
		server.init();
	}

	public void init() {
		try {
			serverSocket = new ServerSocket(port);
			while (true) {
				// 从请求队列中取出一个连接
				Socket client = serverSocket.accept();
				// 处理这次连接
				new HandlerThread(client);
			}
		} catch (Exception e) {
			System.out.println("服务器异常: " + e.getMessage());
		}
	}

	private class HandlerThread implements Runnable {
		private Socket socket;

		public HandlerThread(Socket client) {
			socket = client;
			new Thread(this).start();
		}

		public void run() {
			try {
				// 读取客户端数据
				BufferedReader input = new BufferedReader(
						new InputStreamReader(socket.getInputStream()));
				String clientInputStr = input.readLine();// 这里要注意和客户端输出流的写方法对应,否则会抛
															// EOFException
				// 处理客户端数据
				System.out.println("客户端发过来的内容:" + clientInputStr);

				// 向客户端回复信息
				PrintStream out = new PrintStream(socket.getOutputStream());
				System.out.print("请输入:\t");
				// 发送键盘输入的一行
				String s = new BufferedReader(new InputStreamReader(System.in))
						.readLine();
				out.println(s);

				out.close();
				input.close();
			} catch (Exception e) {
				System.out.println("服务器 run 异常: " + e.getMessage());
			} finally {
				if (socket != null) {
					try {
						socket.close();
					} catch (Exception e) {
						socket = null;
						System.out.println("服务端 finally 异常:" + e.getMessage());
					}
				}
			}
		}
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDK8 网络Net包研究(二) 的相关文章

  • 51单片机实训(一)————Keil 基本操作

    文章目录 前言 一 Keil是什么 二 Keil基本操作 1 新建Keil工程 2 编写代码 3 输出 hex 文件 并编译 4 关联仿真程序 总结 前言 大家好 我是三 这是我的第二篇文章 更新有点慢 抱歉 上一篇文章 咱们了解学习了Pr
  • PTA 1075 链表元素分类 (c++)

    1075 链表元素分类 25 分 思路 首先建立一个结构体包含数据和下个地址 还有大小为3得vector数组 然后建立一个结构体数组 下标即为当前结点得地址 这样其实就可以用结构体数组来模拟链表进行一系列操作 然后定义一个变量并赋给它首地址
  • XML乱码问题和encoding的理解

    文件编码 文件编码也称为字符编码 用于指定在处理文本时如何表示字符 一种编码可能优于另一种编码主要取决于它能处理或不能处理哪些语言字符 不过通常首选的是 Unicode 读取或写入文件时 未正确匹配文件编码的情况可能会导致发生异常或产生不正
  • maven打包jar包到本地仓库(命令和插件两种方式)

    maven打包代码到本地仓库 命令行 打包准备 下载好maven 配置了maven的全局变量 测试 进入命令行输入 mvn version 检查maven是否安装好 joi xuyideMacBook Pro mvn version Apa
  • 【转载】Linux驱动程序框架

    http blog csdn net lemon fantasy archive 2009 02 17 3901030 aspx Linux 将所有外部设备看成是一类特殊文件 称之为 设备文件 如果说系统调用是Linux内核和应用程序之间的
  • 软件测试操作技巧分享

    一 测试阶段划分 1 单个模块功能测试时间相对较长 但每一个项目都应该有专门的集成测试阶段 并且应该不止进行一轮 每一轮集成测试 应该都有自己的目的 比如第一轮集成测试 是根据集成测试要点验证整体功能情况 第二轮集成测试是回归测试 第三轮集
  • 华为OD机试真题-新词挖掘【2023Q1】

    题目描述 小华负责公司知识图谱产品 现在要通过新词挖掘完善知识图谱新词挖掘 给出一个待挖掘问题内容字符串Content和一人词的字符串word 找到content中所有word的新词 新词 使用词word的字符排列形成的字符串 请帮小华实现
  • 改写PEB在傀儡进程执行代码

    方法来源于shadow3 我整理下 include
  • 单片机毕设 题目_ 基于单片机的智能小车 - 嵌入式 物联网 本科毕设

    文章目录 1 简介 2 绪论 2 1 课题背景与目的 3 系统设计 3 1 设计方案 3 1 1 小车遥控部分 方案一 方案二 3 1 2 小车驱动部分 方案一 方案二 3 2 系统架构 3 3 主要设计流程 3 3 1 材料 3 3 2
  • 如何在virtualbox模拟的安卓系统移植virgl

    Virgl是一种在虚拟机中实现3D加速的技术 它可以将虚拟机的图形输出传递给宿主机的显卡进行加速处理 如果想要在VirtualBox模拟的安卓系统上移植Virgl 可以按照以下步骤操作 在VirtualBox中创建一个安卓虚拟机 并确保它已
  • 转变思路,重建团队

    每一次人员流动都会带来一次思考 去年秋天 受到andriod等领域大面积招人波及等原因 离职的3个同事有2个都干了与andriod有关的工作 觉得andriod很可能已经产生了泡沫 导致团队出现人员流失 1 最近 经过一个反思周期之后 随着
  • VUE 富文本 wangEditor v4版本 增加源码模式 与 Monaco Editor结合使用

    VUE 富文本 找了好多开源库 发现 wangEditor Github的星最多 应该也是值得信赖的 但是在使用过程中发现wangEditor 没有源码模式 文档也说明需要自己对接 wangEditor官方文档 于是自己写了一个与 Mona
  • opencv 图像填充

    定义pad image stride函数 将图像的长和宽填充到可以被指定整数整除 这个整数倍通常定义为stride 一 opencv关键函数 opencv关键函数 cv2 copyMakeBorder im为待填充的图像 top为图像上方填
  • 计算机网络-网络层-路由器的工作原理

    六 计算机网络 网络层 路由器的工作原理 一 路由的定义 跨越从源主机到目标主机的一个互联网络来转发数据包的过程 二 路由器的工作原理 1 路由器的工作原理 主机1 1要发送数据到主机4 1 数据封装好了以后送到路由器A 路由器A收到数据包
  • 正规表达式与有限自动机

    1 美图 2 概念 3 正规式和正规集 正规集可以用正规表达式 简称正规式 表示 正规表达式是表示正规集一种方法 一个字集合是正规集当且仅当它能用正规式表示 3 1 正规式和正规集的递归定义 4 确定有限自动机 DFA
  • 页面启动自动使用jquery实现自动加载方法的三种形式

    第一种 function a 声明一个方法 alert a方法 window nl ad function 自动调用上面那个方法 a 第二种 function b alert b方法 document ready function 在这里写

随机推荐

  • el-tree使用setCheckedKeys清空树节点不生效

    问题描述 在切换下拉选框的change事件中使用this refs tree setCheckedKeys 清空目标树已选择节点 但不生效 问题解决 清空 clearAllNodes function this nextTick funct
  • LaTeX Error: Missing \begin{document}

    解决方案 将除 tex之外的文件全部删掉 再重新运行一遍 就可以啦
  • 【opencv实践】人脸识别匹配——识别自己的脸

    本文由 星沉阁冰不语出品 转载请注明作者和出处 文章链接 http blog csdn net xingchenbingbuyu article details 51472330 在之前数据收集和预处理和模型训练两篇博客中 已经把人脸识别的
  • 字符函数和内存函数的模拟实现

    1 字符串函数 长度不受限的函数 1 1strlen函数 字符串已经 0 作为结束标志 strlen函数返回的是在字符串中 0 前面出现的字符个数 不包含 0 参数指向的字符串必须要以 0 结束 模拟实现 size t my strlen1
  • 斯坦福大学教授,极力推荐5本python入门书籍,入门最快基础最好

    为什么要选择python Python是一门更注重可读性和效率的语言 尤其是相较于 Java PHP 以及 C 这样的语言 它的这两个优势让其在开发者中大受欢迎 如果你正处于想学习python或者正在python入门阶段 推荐5套pytho
  • 简述关于ASP.NET MVC与.NET CORE 的区别

    简述关于ASP NET MVC与 NET CORE的区别 1 关于ASP NET 关于MVC 刚开始接触这个技术的时候我经常不理解他们的名字 我相信许多学ASP NET开发人员开始接触MVC应该也和我一样产生很多为什么 也会误认为认为MVC
  • K8S之使用yaml格式定义pod

    mysql pod yaml overView 1 web服务与db打包放在同一个pod中 本地通过localhost来访问 并附带存活性 可用性检测 2 补充重启策略 镜像拉去策略 3 对容器资源进行限制 apiVersion apps
  • VSCode 插件Code Runner 中文提示乱码

    所属专栏 程序错误解决方法 建议收藏 作 者 我是夜阑的狗 个人简介 一个正在努力学技术的CV工程师 专注基础和实战分享 欢迎咨询 欢迎大家 这里是CSDN 我总结知识的地方 喜欢的话请三连 有问题请私信 文章目录 前言 一 Code Ru
  • 海量数据存储之Key-Value存储简介

    转自 http forchenyun iteye com blog 744935 Key value存储简介 具备高可靠性及可扩 展性的海量数据存储对互联网公司来说是一个巨大的挑战 传统的数据库往往很难满足该需求 并且很多时候对于特定的系统
  • V2X应用场景之协同式自动驾驶

    转自 http zhidx com p 96637 html V2X应用场景之协同式自动驾驶 这个应用场景我觉得是比较典型的 也想多花点时间给大家介绍一下 就是关于V2X在自动驾驶里面很典型的应用 我们管它叫协同式自动驾驶车队 什么意思呢
  • DockerFile详细介绍

    dockerfile 文件中的常见指令 详细教程地址 ADD 复制和解包文件 COPY 复制文本 CMD 指定这个容器启动的时候要运行的命令 只有最后一个会生效可被替代 ONBUILD 当构建一个被继承DockerFile 这个时候就会运行
  • Mysql多对多查询

    1 多对多需要三张表 如图所示 2 对应是SQL语句 SELECT A aname B hobby FROM A B AB WHERE A id AB aid AND B id AB bid 3 对应的查询结果
  • A list of Go projects

    Indexes and search engines These sites provide indexes and search engines for Go packages godoc org go search gowalker S
  • Python 实现FIR低通滤波器设计

    FIR Finite Impulse Response 有限脉冲响应 低通滤波器是一种数字滤波器 它可以在数字信号处理中用来对信号进行低通滤波 下面是一个简单的 Python 代码示例 用于设计 FIR 低通滤波器 import numpy
  • Oracle查看主键、删除主键以及新增联合主键

    Oracle查看主键 删除主键以及新增联合主键 主键是用于唯一标识表中的每一条数据的 不能重复也不能为null 一个表中不能有多个独立的主键 但是一个表中可以有联合主键 即多个字段组合 一 查看主键 SELECT FROM USER CON
  • vue中常用的7个属性

    1 el属性 用来指示vue编译器从什么地方开始解析 vue的语法 可以说是一个占位符 2 data属性 用来组织从view中抽象出来的属性 可以说将视图的数据抽象出来存放在data中 3 template属性 用来设置模板 会替换页面元素
  • 字节序转换

    一 概念 1 小端法 Little Endian 就是低位字节排放在内存的低地址端 即该值的起始地址 高位字节排放在内存的高地址端 2 大端法 Big Endian 就是高位字节排放在内存的低地址端 即该值的起始地址 低位字节排放在内存的高
  • Java Swing基础(顶层容器,中间层容器,原子组件)

    Swing基础 Swing顶层容器 Swing的3个顶层容器类 JFrame JApplet JDialog 都是重量级组件 分别继承了AWT组件Frame Applet和Dialog 每个顶层容器都有一个内容面板 通常直接或间接的容纳别的
  • 目前支持CUDA的nVIDIA的显卡型号 驱动及其 修改过后的 inf文件

    下载169 21 forceware winxp 32bit english whql exe NVIDIA Driver for Microsoft Windows XP with CUDA Support 169 21 我们在运行它的时
  • JDK8 网络Net包研究(二)

    完整的Socket 客户端 和 服务端实例代码 Client package lang socket import java io BufferedReader import java io IOException import java