当前位置: 首页 > news >正文

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客户端
功能监听指定端口,等待客户端连接,处理客户端发送的数据连接到服务器,发送数据到服务器
主要类ServerSocketSocket
创建方式ServerSocket ss = new ServerSocket(port);Socket s = new Socket(host, port);
监听端口通过ServerSocket构造函数指定无需监听,连接到服务器的指定端口
数据接收使用ServerSocketaccept()方法等待客户端连接,然后获取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字符串,

相关文章:

  • laravel对接百度智能云 实现智能机器人
  • Docker使用daocloud镜像加速
  • 基于python的随机森林回归预测+贝叶斯优化超参数前后训练效果对比
  • 1.k8s:架构,组件,基础概念
  • 和小红书一起参会! 了解大模型与大数据融合的技术趋势
  • 后台运行大师:HarmonyOS 3.0中如何轻松设置APP常驻后台
  • 左耳听风_030_29_推荐阅读分布式数据调度相关论文
  • Vue.js有哪些优点和缺点
  • Redis-实战篇-什么是缓存-添加redis缓存
  • 安卓应用开发学习:通过腾讯地图SDK实现定位功能
  • 在Spring Boot项目中引入本地JAR包的步骤和配置
  • 【SkiaSharp绘图14】SKCanvas方法详解(三)URL注释、按顶点绘制、 是否裁切区域之外、旋转、缩放、倾斜、平移、保存/恢复画布
  • Linux_fileio实现copy文件
  • RK3568平台(USB篇)USB HID设备
  • 【文件上传】
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【mysql】环境安装、服务启动、密码设置
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 5、React组件事件详解
  • IOS评论框不贴底(ios12新bug)
  • Kibana配置logstash,报表一体化
  • maya建模与骨骼动画快速实现人工鱼
  • PHP那些事儿
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue 重置组件到初始状态
  • Zepto.js源码学习之二
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 我与Jetbrains的这些年
  • 移动端解决方案学习记录
  • 追踪解析 FutureTask 源码
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #每天一道面试题# 什么是MySQL的回表查询
  • (1)SpringCloud 整合Python
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)二分查找 超详细
  • (Note)C++中的继承方式
  • (附源码)springboot教学评价 毕业设计 641310
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net mvc部分视图
  • .NET 材料检测系统崩溃分析
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET实现之(自动更新)
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /etc/sudoer文件配置简析
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @KafkaListener注解详解(一)| 常用参数详解
  • @property @synthesize @dynamic 及相关属性作用探究
  • [04] Android逐帧动画(一)