java TCP服务器与客户端通信示例
目录
背景:
TCP服务代码解析:
TCP服务器的代码:
服务器程序的工作流程:
TCP客户端代码解析 :
TCP客户端代码:
客户端工作流程:
总结:
背景:
如何使用Java编程语言实现一个简单的TCP服务器和客户端。那么TCP是什么?TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。下面将编写两个简单的Java程序来展示TCP通信的基本原理。
TCP服务代码解析:
TCP服务器的代码:
import java.net.*;
import java.io.*; public class TCPServer { public static void main(String[] args) throws Exception { // 创建一个ServerSocket对象,监听6666端口 ServerSocket ss = new ServerSocket(6666); // 无限循环,等待客户端连接 while (true) { // 当有客户端连接时,accept()方法返回一个新的Socket对象 Socket s = ss.accept(); // 从Socket中获取输入流,并使用DataInputStream进行封装 DataInputStream dis = new DataInputStream(s.getInputStream()); // 从输入流中读取UTF字符串并打印 String message = dis.readUTF(); System.out.println("Received from client: " + message); // 关闭流和Socket连接 dis.close(); s.close(); } }
}
服务器程序的工作流程:
1.创建一个ServerSoket对象,监听指定的端口(这里6666)
2.进入无限循环,等待客户端的连接
3.当有客户端时,accept()方法会返回一个新的Socket独享
4.从这个Socket对象中获取输入流,并使用DataInputStream进行封装
5.读取输入流中的UTF字符串,并打印到控制台
6.关闭输入流和Socket连接
TCP客户端代码解析 :
TCP客户端代码:
import java.net.*;
import java.io.*; public class TCPClient { public static void main(String[] args) throws Exception { // 创建一个Socket对象,连接到服务器的指定IP和端口 Socket s = new Socket("127.0.0.1", 6666); // 从Socket中获取输出流,并使用DataOutputStream进行封装 OutputStream os = s.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); // 向输出流中写入UTF字符串 dos.writeUTF("hello server!"); // 刷新输出流,确保数据被发送 dos.flush(); // 关闭输出流和Socket连接 dos.close(); s.close(); }
}
客户端工作流程:
1.创建一个Socket对象,连接到服务器的指定IP和端口(这里是127.0.0.1和666)
2.从这个Socket对象中获取输出流,并使用DataOuptStream进行封装
3.向输出流中写入UTF字符串
3.刷新输出流,确保数据被发送到服务器
5.关闭输出流和Socket连接
总结:
| 类别 | TCP服务器 | TCP客户端 |
|---|---|---|
| 功能 | 监听指定端口,等待客户端连接,处理客户端发送的数据 | 连接到服务器,发送数据到服务器 |
| 主要类 | ServerSocket | Socket |
| 创建方式 | ServerSocket ss = new ServerSocket(port); | Socket s = new Socket(host, port); |
| 监听端口 | 通过ServerSocket构造函数指定 | 无需监听,连接到服务器的指定端口 |
| 数据接收 | 使用ServerSocket的accept()方法等待客户端连接,然后获取Socket对象的InputStream进行读取 | 使用Socket对象的getOutputStream()获取输出流,然后写入数据 |
| 数据发送 | 无需直接发送数据,而是从客户端接收数据 | 使用Socket对象的getOutputStream()获取输出流,并使用DataOutputStream或其他包装类写入数据 |
| 数据读取 | 使用Socket对象的getInputStream()获取输入流,并使用DataInputStream或其他包装类读取数据 | 无需直接读取数据,而是将数据发送到服务器 |
| 关闭连接 | 关闭Socket对象的输入流和Socket本身 | 关闭Socket对象的输出流和Socket本身 |
| 注意事项 | 1.需要处理并发连接(例如使用多线程) 2.需要处理可能的异常和错误 3.可能需要设置超时和缓冲区大小 | 1.需要确保服务器正在运行并监听指定端口 2.需要处理可能的异常和错误 3.可能需要设置超时和缓冲区大小 |
通过上面的示例,Java中TCP服务器和客户端的基本实现。服务监听一个端口,等待客户端的连接,当客户端连接后,双方可以通过Socket 对象进行数据的读写,这里使用DataInputStream和DataOutputeam来封装输入流和输出流,以便更好的读取和写入UTF字符串,
相关文章:
java TCP服务器与客户端通信示例
目录 背景: TCP服务代码解析: TCP服务器的代码: 服务器程序的工作流程: TCP客户端代码解析 : TCP客户端代码: 客户端工作流程: 总结: 背景: 如何使用Java编程语言实现一个简单的TCP服务器和客户端。那么TCP是什么?TCP(Transmission Control Protocol&…...
【C++】构造函数和析构函数
目录 对象初始化-构造函数构造函数的分类构造函数的调用拷贝构造的应用构造函数调用规则深拷贝和浅拷贝初始化列表类对象作为类成员静态成员 对象释放-析构函数 对象初始化-构造函数 构造函数是类实例化的时候会自动调用的初始化函数,如果用户不写编译器会提供一个…...
Docker Compose:多容器应用的管理利器
在现代应用开发中,微服务架构已成为主流。管理和编排多个容器应用变得至关重要。Docker Compose 是一个强大的工具,通过一个简单的 YAML 文件定义和运行多容器应用。本文将详细介绍 Docker Compose 的基本概念、安装、用法以及一个实际的示例,…...
Leetcode - 133双周赛
目录 一,3190. 使所有元素都可以被 3 整除的最少操作数 二,3191. 使二进制数组全部等于 1 的最少操作次数 I 三,3192. 使二进制数组全部等于 1 的最少操作次数 II 四,3193. 统计逆序对的数目 一,3190. 使所有元素都…...
C++总结
...
汽车免拆诊断案例 | 2016 款吉利帝豪EV车无法加速
故障现象 一辆2016款吉利帝豪EV车,累计行驶里程约为28.4万km,车主反映车辆无法加速。 故障诊断 接车后路试,行驶约1 km,踩下加速踏板,无法加速,车速为20 km/h左右,同时组合仪表上的电机及控制…...
前端开发之webpack
安装与入门超详细!webpack入门教程(一)-腾讯云开发者社区-腾讯云...
将内容复制到剪贴板?分享 1 段优质 JS 代码片段!
大家好,我是大澈! 本文约 600 字,整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 JS 代码片段,使用 Clipboard API 实现将内容复制到剪贴板。 老规矩,先阅读代码片段并思考,再看代码解析…...
MAS0902量产工具分享,MAS0902A开卡教程,MAS0901量产工具下载
MAS0902和MAS1102都是基于SATA3.2技术开发的DRAM-less SSD控制芯片,简单来说就是SATA协议无缓存主控。下面是我摸索的麦光黑金300 240G SSD开卡修复简易教程,也就是MAS0902量产过程: 注意:开卡转接线必须要用ASM1153E或JMS578主控…...
从我邮毕业啦!!!
引言 时间过的好快,转眼间就要从北邮毕业了,距离上一次月度总结又过去了两个月,故作本次总结。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络,欢迎Star! 毕业🎓 6月1号完成了自己的…...
gemini 1.5 flash (node项目)
https://www.npmjs.com/package/google/generative-ai https://ai.google.dev/pricing?hlzh-cn https://aistudio.google.com/app/apikey https://ai.google.dev/gemini-api/docs/models/gemini?hlzh-cn#gemini-1.5-flash https://ai.google.dev/gemini-api/docs/get-started…...
在线字节大端序小端序转换器
具体请前往:在线字节大端序小端序转换器...
css_17_背景属性鼠标属性
一.背景属性 -属性值:background-color(设置背景颜色) 默认背景颜色是 transparent。 -属性值:background-image(设置背景图片) url(图片的地址) -属性值:background-re…...
Python hash编码(go hash编码)
id"中国人" 首先,go语言hash: import (mmh3 "murmurhash3") mmh3.Murmurhash3([]byte(id)) 对应到Python hash编码,可以直接使用mmh3 import mmh3 mmh3.hash(id,signedFalse) 其源码可以表示为 def sum32WithSeed(datas, seed…...
004 插入排序(lua)
文章目录 123 1 -- Lua中没有类和方法的概念,所以我们将所有功能都写在一个脚本中 -- 交换数组中两个元素的功能 local function swap(arr, i, j) local temp arr[i] arr[i] arr[j] arr[j] temp end -- 插入排序算法的实现 local function insertionS…...
计算机网络 —— 基本概念
基本概念 1. 通信协议2. 面向连接 v.s. 面向无连接3. 电路交换 v.s. 分组交换4. 单工通信 v.s. 双工通信 1. 通信协议 通信协议就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种“约定”使那些由不同厂商的设备、不同的CPU 以及不同的操作系统组成的计算…...
高精度除法的实现
高精度除法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现 在这里就不再详细讲解,只讲解主体过程qwq 主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 …...
STM32CUBEMX配置USB虚拟串口
STM32CUBEMX配置USB虚拟串口 cubemx上默认配置即可。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 配置完后生成工程,主要就是要知道串口的收发接口就行了。 发送:CDC_Transmit_FS(),同时记得包含头文件#include “…...
安卓开发中margin和padding的区别
在 Android 开发中,margin 和 padding 都是用来定义视图(View)的空间属性,但它们的作用和应用场景有所不同: Margin(外边距): Margin 是视图与其他视图之间的空间。它定义了视图之间…...
Symfony事件调度系统:掌控应用程序生命周期的钥匙
Symfony事件调度系统:掌控应用程序生命周期的钥匙 引言 Symfony是一个高度灵活的PHP框架,用于构建各种规模的Web应用程序。它的核心特性之一是事件调度系统,该系统允许开发者在应用程序的生命周期中触发和监听事件。这种机制为开发者提供了…...
Video2X AI视频增强实用指南:零基础掌握高效画质提升解决方案
Video2X AI视频增强实用指南:零基础掌握高效画质提升解决方案 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Tr…...
SeqGPT-560M部署避坑:常见‘加载中’卡顿、端口冲突、GPU未识别解决
SeqGPT-560M部署避坑:常见‘加载中’卡顿、端口冲突、GPU未识别解决 1. 模型简介与核心价值 SeqGPT-560M是阿里达摩院推出的零样本文本理解模型,这个560M参数量的轻量级模型专门针对中文场景优化,无需训练就能直接处理文本分类和信息抽取任…...
OpenClaw本地知识库整合:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF增强专业领域回答
OpenClaw本地知识库整合:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF增强专业领域回答 1. 为什么需要本地知识库与模型协同工作 去年我在处理一批医疗行业的技术文档时,发现通用大模型对专业术语的解释总差那么点意思。模型要么给出过于笼统…...
资源优化挑战:如何用轻量级字体解决嵌入式系统中文显示难题
资源优化挑战:如何用轻量级字体解决嵌入式系统中文显示难题 【免费下载链接】LxgwWenKai LxgwWenKai: 这是一个开源的中文字体项目,提供了多种版本的字体文件,适用于不同的使用场景,包括屏幕阅读、轻便版、GB规范字形和TC旧字形版…...
突破Android固件提取瓶颈:从格式迷宫到一站式解决方案
突破Android固件提取瓶颈:从格式迷宫到一站式解决方案 【免费下载链接】Firmware_extractor 项目地址: https://gitcode.com/gh_mirrors/fi/Firmware_extractor 【痛点场景:固件提取的"格式迷宫"困境】 深夜的开发者工作室里…...
2023款惠普战66六代笔记本Win11重装教程:从U盘制作到跳过联网
2023款惠普战66六代笔记本Win11重装全流程指南 最近帮朋友折腾一台新入手的惠普战66六代笔记本,发现这款商务本在重装系统时有些细节需要特别注意。尤其是Win11的强制联网激活机制和BitLocker加密的坑,稍不注意就会让整个重装过程卡壳。下面把我实测可用…...
论文省心了!盘点2026年全网爆红的的降AI率平台
轻松降低论文AI率在2026年已不再是天方夜谭。2026年降AI率平台横空出世,实测提速效果炸裂,覆盖AI痕迹消除、文本改写润色、降重优化、学术合规检测四大核心场景,高效搞定毕业论文难题。 一、全流程王者:一站式搞定论文全链路 这类…...
3D打印螺纹设计革新:CustomThreads项目突破传统加工限制
3D打印螺纹设计革新:CustomThreads项目突破传统加工限制 【免费下载链接】CustomThreads Fusion 360 Thread Profiles for 3D-Printed Threads 项目地址: https://gitcode.com/gh_mirrors/cu/CustomThreads 你是否曾遇到3D打印螺纹时的挫败感?精心…...
SAP系统与外部服务通信中断?手把手教你用STRUST搞定SSL证书过期问题(附Concur案例)
SAP系统SSL证书过期紧急处理指南:从报错诊断到STRUST实战 凌晨三点,SAP生产系统的监控警报突然响起——与Concur的差旅报销数据同步中断了。这不是普通的网络抖动,而是直接影响员工报销流程的关键故障。作为SAP Basis管理员,您需要…...
OpenLiteSpeed实战踩坑记录:为什么我最终回归了LNMP环境?
OpenLiteSpeed实战反思:为什么复杂WordPress环境更适合LNMP? 最近在技术社区里,OpenLiteSpeed被频繁提及,尤其是它宣称的高性能PHP处理能力吸引了不少WordPress站长的注意。作为一个长期使用LNMP环境的开发者,我也被这…...
