Java网络编程 TCP通信(Socket 与 ServerSocket)

1.TCP通信原理

TCP通信涉及两个端点:客户端和服务器。服务器端使用 ServerSocket 监听特定端口,等待客户端的连接请求。客户端使用 Socket 连接到服务器的IP地址和端口。一旦连接建立,双方就可以通过输入输出流进行数据交换.

ServerSocket是等待客户端的请求,一旦获得一个连接请求,就创建一个Socket示例来与客户端进行通信。 

2.Socket和ServerSocket

ServerSocket

ServerSocket 类用于服务器端,用于监听来自客户端的连接请求。以下是创建 ServerSocket 的基本步骤:

  1. 创建 ServerSocket 实例并指定端口号。
  2. 调用 accept() 方法等待客户端连接。
  3. 接收客户端的 Socket 对象。
  4. 使用输入输出流与客户端进行通信。

Socket

Socket 类用于客户端,用于连接到服务器并发送/接收数据。以下是使用 Socket 的基本步骤:

  1. 创建 Socket 实例并指定服务器的IP地址和端口号。
  2. 连接到服务器。
  3. 使用输入输出流发送和接收数据。
  4. 关闭连接。

 3.演示

服务器端代码

public class TcpServer {public static void main(String[] args) {int port = 12345;try (ServerSocket serverSocket = new ServerSocket(port)) {System.out.println("服务器启动,等待客户端连接...");Socket clientSocket = serverSocket.accept();System.out.println("客户端已连接");InputStream input = clientSocket.getInputStream();OutputStream output = clientSocket.getOutputStream();// 读取客户端发送的数据byte[] buffer = new byte[1024];int bytesRead = input.read(buffer);System.out.println("来自客户端的消息: " + new String(buffer, 0, bytesRead));// 向客户端发送响应output.write("服务器已收到消息".getBytes());output.flush();} catch (IOException e) {e.printStackTrace();}}
}

客户端代码

public class TcpClient {public static void main(String[] args) {String host = "127.0.0.1";int port = 12345;try (Socket socket = new Socket(host, port)) {System.out.println("连接到服务器...");OutputStream output = socket.getOutputStream();String message = "你好,服务器!";output.write(message.getBytes());output.flush();System.out.println("消息已发送");} catch (IOException e) {e.printStackTrace();}}
}

TCP通信的基本概念

  1. 面向连接:TCP通信在数据传输之前需要建立连接,通过三次握手过程。
  2. 可靠性:TCP通过序列号、确认应答、重传机制等确保数据的可靠传输。
  3. 流量控制:TCP使用窗口机制来控制发送方的发送速率,防止接收方来不及处理。
  4. 拥塞控制:TCP通过慢启动、拥塞避免、快速重传和快速恢复等算法来控制网络拥塞。

TCP和UDP的比较

  1. 连接性:TCP是面向连接的,而UDP是无连接的。
  2. 速度:TCP由于需要建立连接和保证数据完整性,速度较慢;UDP速度快,但可靠性较低。
  3. 适用场景:TCP适用于需要可靠传输的场景,如文件传输、邮件传输等;UDP适用于对速度要求高的场景,如实时视频、在线游戏等。

Java中的TCP通信

  1. ServerSocket:服务器端使用ServerSocket来监听客户端的连接请求。
  2. Socket:客户端使用Socket来连接服务器,并进行数据传输。
  3. 输入输出流Socket提供输入流和输出流来进行数据的读取和发送。
  4. 多线程:为了同时处理多个客户端,服务器端通常需要使用多线程。

TCP通信的典型应用

  1. Web服务器:HTTP协议基于TCP,用于客户端和服务器之间的数据传输。
  2. 数据库连接:数据库客户端通过TCP与服务器进行通信。
  3. 文件传输:FTP(文件传输协议)使用TCP来保证文件传输的可靠性。

TCP编程的注意事项

  1. 异常处理:网络编程中需要妥善处理各种网络异常。
  2. 资源管理:确保及时关闭Socket连接和流,释放系统资源。
  3. 安全性:考虑使用加密和认证机制来保护数据传输的安全。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/140735.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

视频工具EasyDarwin生成RTMP给WVP拉流列表

效果 运行 登录 http://127.0.0.1:10086/ admin/admin 创建RTMP服务

微型导轨在光学仪器中的应用!

微型导轨在光学仪器中扮演着至关重要的角色,以其高精度、高稳定性的特点,提供稳定的光学路径和精确的光学元件位置。接下来,我们一起来看看微型导轨在光学仪器中的应用实例! 1、显微镜:在显微镜中,微型导轨…

鹏哥C语言自定义笔记重点(67-)

67. 68. 69. 70. 71.结构体内容 72.理解结构体的字节数 73. #pragma once //头文件中使用,功能是:防止头文件被多次引用 74.结构体传参 结论:结构体传参时,要传结构体地址。 75.位段 76.static是只能在该文件中看到,其他地方看不到 77.…

【6大设计原则】迪米特法则:解密软件设计中的“最少知识原则”

引言 在软件设计中,设计原则是指导我们构建高质量、可维护系统的基石。迪米特法则(Law of Demeter,LoD),也被称为“最少知识原则”,是六大设计原则之一。它强调对象之间的松耦合,确保系统的各个…

8. Transforms的使用(三)-- Resize

Transforms的使用(三) 1. 为什么要使用Resize 在模型的训练过程中往往需要图片数据的维度相同,才能适应深度学习模型中的相关神经网络结构,这时候就需要使用Resize保证所有的图片保持相同的尺寸2. 使用Resize调整图片的尺寸 在pytorch2.3的版本上,Resize()支持对Tensor类…

1405 问题 E: 世界杯

废话 这个题,我估计 22 22 22 年的时候写过一次,当时应该是搞明白了,现在重新写还是不会写,有点无奈 题目 问题 E: 世界杯:现在的 OJ 把题目加到一个活动里面去之后,感觉之后这个链接就访问不了了。题目…

CSS—4

1.定位 1.相对定位 2.绝对定位 3.固定定位 4.粘性定位 5.定位的特殊应用 2.布局-版心 3.布局-常用布局名词 4.布局-重置默认样式

321. 拼接最大数

1. 题目 321. 拼接最大数 2. 解题思路 题目精简一下: 给你两个数组,从每个数组选取N个元素(需要保持相对顺序,比如从数组[4,8,2]选取两个元素,选取出来后必须保持顺序,比如选4和2,那么组成新…

对操作系统(OS)管理和进程的理解

文章目录 从冯诺依曼体系入手来了解计算机硬件部分操作系统操作系统的概念设计操作系统(OS)的目的对下(硬件)OS的管理对上如何理解系统调用 进程 在计算机系统中,硬件、操作系统和进程是三个至关重要的概念。它们相互协…

C# 反射之动态生成dll/exe

这个可能应该属于反射的高级使用范围了,平常在项目中使用的人估计也不是很多。由于使用反射的话会降低性能,比如之前用到的GetValue、SetValue等之类,但是使用这种方式会大大提高效率,在这里我只想说,都直接写IL指令了…

C++八股文之面向对象篇

🤖个人主页:晚风相伴-CSDN博客 思维导图链接:面向对象的性质 持续更新中…… 💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧 …

【CSS in Depth 2 精译_031】5.3 Grid 网格布局的两种替代语法

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

【VSCode】VSCode Background 背景插件辅助窗口程序

前排贴上Github项目链接 GitHub窗口项目链接 这是一个基于VSCode上由shalldie上传的background扩展制作的windows窗口程序。 该程序旨在通过窗口程序尽可能的完善该扩展原有的功能。 background - shalldie 的最大优势是我目前仅在其扩展上发现了UseFront的选项,这…

2011年全国硕士研究生入学统一考试计算机科学与技术

1. 试卷背景: 试题:2011年全国硕士研究生入学统一考试计算机科学与技术学科联考中的计算机学科专业基础综合试题。难点:该问题的研究难点在于试题涵盖了计算机科学与技术的多个方面,包括数据结构、算法、计算机组成原理、操作系统…

text2sql(NL2Sql)综述《The Dawn of Natural Language to SQL: Are We Fully Ready?》

《The Dawn of Natural Language to SQL: Are We Fully Ready?》(github)出自2024年6月的NL2SQL(Natural language to SQL )综述论文。这篇论文尝试回答如下三个问题: 问题1:NL2SQL的现状是什么?(Q1:Where Are we Now?) 论文图1总结了近20年NL2SQL方法…

Qt:懒汉单例(附带单例使用和内存管理)

前言 本文主要写懒汉单例以及单例的释放,网上很多教程只有单例的创建,但是并没有告诉我们单例的内存管理,这就很头疼。 正文 以下是两种懒汉单例的写法 1. 懒汉式单例(多线程不安全,但是在单线程里面是安全的&…

protobuf中c、c++、python使用

文章目录 protobuf实例:例题1:[CISCN 2023 初赛]StrangeTalkBot分析:思路:利用: 例题2:[CISCN 2024]protoverflow分析: protobuf Protocol Buffers,是Google公司开发的一种数据描述语…

二十三种设计模式之原型模式

一.什么是原型模式 ‌‌原型模式是一种创建型对象设计模式,它通过复制一个已经创建的实例(即原型对象)来创建一个和原型对象相同的新对象。‌ 这种模式在面向对象软件设计中非常有用,因为它允许通过复制现有对象来快速生成多个相似…

新160个crackme - 057-bbbs-crackme04

运行分析 因软件版本老旧,需使用windows XP虚拟机运行有个SystemID,值为12345678需破解User ID和Password PE分析 yC壳,32位 OD手动脱壳 使用windows XP虚拟机,将程序拖入OD按一下F8,ESP变红,根据ESP定律设…

子比主题美化 - 可移动悬浮窗 弹窗功能代码教程

移动页面演示效果 这个功能完全适配子比主题使用,代码开源,可以做其它功能弹窗或者菜单栏等等,后期有时间在做成桌面页面也可以鼠标移动,点击参考:移动悬浮窗详细代码教程