TCP通信发送和接收数据(Socket、ServerSocket)、TCP通信案例

2023-11-13

TCP

概述:

  • TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
  • Java对基于TCP协议的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信
  • Java为客户端提供了Socket类,为服务器端提供了ServerSocket类

互联网

TCP发送接收数据

发送数据
1.创建客户端的Socket对象
	Socket s=new Socket("host",port:12345);
	Socket s=new Socket(InetAddress.getByName("host"),port:12345);
2.获取输出流,写数据
	OutputStream os=s.getOutputStream();
3.释放资源
	os.close();
s.close();

Socket:实现客户端套接字。套接字是两台机器之间通信的端点

Socket
所在包:java.net 
public class Socket
	   extends Object
 	   implements Closeable
实现客户端套接字。套接字是两台机器之间通信的端点

常用方法:

方法名 作用
Socket(InetAddress address,int port) 创建流套接字并将其连接到指定IP地址的指定端口号
Socket(String host,int port) 和上面功能相同,不过在底层原理中会将host字符串转换为InetAddress
OutputStream getOutputStream() 返回此套接字的输出流
接收数据
1.创建服务器端Socket对象(ServerSocket)
	ServerSocket(int port);
	ServerSocket ss=new ServerSocket(int port);
2.获取输入流,读数据,并把数据显示在控制台
	InputStream is=ss.getInputStream();
3.释放资源
	ss.close();
ServerSocket
public class ServerSocket
	   extends Object
	   implements Closeable
服务器套接字。服务器套接字等待通过网络进入的请求。它根据该请求执行一些操作,然后可能将结果返回给请求者

常用方法:

方法名 作用
ServerSocket(in port) 创建绑定到指定端口的服务器套接字
Socket accept() 侦听要连接到此套接字并接收它 返回一个Socket对象

TCP通信案例1

代码示例:

发送的核心代码
	Socket s=new Socket(InetAddress:"localhost",port:12345);
	OutpurStream os=s.getOutputStream();
	os.write("需要传递的内容".getByte());
	os.close();
	s.close();
接收的核心代码
	ServerSocket ss=new ServerSocket(port:12345);
	InputStream is=ss.getInputStream();
	Socket s = ss.accept();
	byte[] by=new byte[1024];
	int len = is.read(by);
	String data=new String(by,0,len);
	System.out.print("数据是="+data);
	ss.close();       //一般释放这一个就可以了 因为is是承接ss对象定义的
	is.close();

TCP接收数据后给出反馈案例2

代码示例:

发送:
	Socket s=new Socket(InetAddress:"localhost",port:12345);
	OutputStream os=s.getOutputStream();
	os.write("TCP我来了!".getByte());
	
	//接收服务器反馈
	InputStream is=s.getInputStream();
	byte[] by=new byte[1024];
	int len=is.read(by);
	String data=new String(by,0,len);
	System.out.print("客户端:"+data);
	s.close();
	
	接收:
	ServerSocket ss=new ServerSocket(port:12345);
	Socket s=ss.accept();
	InputStream is=s.getInputStream();
	byte[] by=new byte[1024];
	int len=is.read(by);
	String data=new String(by,0,len);
	System.out.print("服务端:"+data);
	
	//给出反馈
	OutputStream os=s.getOutputStream();
	os.write("数据已收到".getByte[]);
	
	ss.close();
	//s.close();
	//is.close();

TCP接收数据后给出反馈案例3

代码示例:

服务端
	public class ServerDemo{
		public static void main(String[] args) throws IOException{
			ServerSocket ss = new ServerSocket(10080);
			Socket s = ss.accept();
			BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
			String line;
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\23353\\Desktop\\666\\xxx.txt")));
			while((line=br.readLine())!=null){      //字符流的特有方法:String readLine()
				System.out.println(line);
				bw.write(line);
				bw.newLine();
				bw.flush();
			}
			ss.close();
		}
	}
客户端
	public static void main(String[] args) throws IOException{
		Socket s = new Socket("100.64.219.93",10080);
		OutputStream os = s.getOutputStream();
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		String line;
		while((line = br.readLine())!=null){
				if("886".equals(line)){
				break;
			}
		bw.write(line);
		bw.newLine();
		bw.flush();
		}
		s.close();
	}

TCP接收数据后给出反馈案例4

要求:
服务器端数据来源于文件
客户端数据来源于文件
代码示例:

服务器端
	public static void main(String[] args) throws IOException{
		ServerSocket ss = new ServerSocket(10080);
		Socket s = ss.accept();
		BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line;
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new 	FileOutputStream("C:\\Users\\23353\\Desktop\\666\\xxx.txt")));
//这里用BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\23353\\Desktop\\666\\xxx.txt"));  也可以
			
		while((line=br.readLine())!=null){//字符流的特有方法StringreadLine()
			System.out.println(line);
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		ss.close();
	}
客户端
	public static void main(String[] args) throws IOException{
		Socket s = new Socket("100.64.219.93",10080);
		OutputStream os = s.getOutputStream();
		BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\23353\\Desktop\\666\\laiyuan.txt"));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		String line;
		while((line=br.readLine())!=null){
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		s.close();
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP通信发送和接收数据(Socket、ServerSocket)、TCP通信案例 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • mysql状态下,命令行清空指令

    mysql状态下 命令行清空指令
  • attention机制_【CV中的Attention机制】SelectiveKernelNetworksSE进化版

    前言 SKNet是SENet的加强版 是attention机制中的与SE同等地位的一个模块 可以方便地添加到现有的网络模型中 对分类问题 分割问题有一定的提升 作者 pprp 编辑 BBuf 1 SKNet SKNet是SENet的加强版
  • QT中QLoggingCategory类的作用

    使用前须知 include category 美 k t ri 种类 类别 使用举例 QLoggingCategory setFilterRules QStringLiteral qt modbus true 作用总结 控制打印输出类别和区
  • html5 first child,childfirst

    在html里 firstchild 有什么作用 表示对第一个字对象的引用 如 DIV的子对象 alert document getElementById abc firstChild tagname 返回SPAN alert documen
  • vcruntime140_1.dll丢失的详细解决办法

    今天准备打开CAD跟ps时候 当打开我自己的ps软件后 弹出了一个对话框 内容是 由于找不到vcruntime140 1 dll 无法继续执行代码 重新安装程序可能会解决此问题 我很纳闷 前几天还好好着呢 于是我上网上查了一下 成功解决了问
  • signature=0e936ad5c99bd8d603e71fa74e787bee,JavaScript 的 BASE64 算法 实现 完美解决中文乱码...

    收藏的Base64编码 解码 在一个外国网站看到的 不过对中文不支持 自己加入了escape 对中文也支持了 先用escape 对中文进行编码 然后再进行base64编码 解码时 再加入 对中文进行解码 p gt W3C DTD HTML
  • URL 链接中 #、?、连接符& 分别有什么作用?

    在一个 URL 中可以包含很多的内容 其中不仅仅是包含 26 个英文字母 10 个罗马数字 中文汉字 还可以拥有井号 问号 连接符 等三种最常见的符号 那么这些符号在网站中都有哪些作用呢 文章目录 一 井号 二 问号 三 连接 一 井号 井
  • Qt:十六进制字符串和十六进制互转

    Qt 十六进制字符串和十六进制互转 前言 一 字符串转换十六进制 1 封装函数 2 函数调用示例 二 16进制转换字符串 前言 网上查了不少方式 踩了不少坑 最终这个方式是我目前使用感觉较好的一种 具体出处已经没印象了 这里放出完整代码供大
  • Spring(二)IOC容器的初始化流程

    文章目录 一 Spring 核心容器类 1 1 BeanFactory 1 2 ApplicationContext 1 3 BeanDefinition 二 IOC容器的初始化 2 1 基于Xml的IOC容器的初始化 2 1 1 寻找入口
  • 15个顶级Java多线程面试题及答案

    1 现在有T1 T2 T3三个线程 你怎样保证T2在T1执行完后执行 T3在T2执行完后执行 这个线程问题通常会在第一轮或电话面试阶段被问到 目的是检测你对 join 方法是否熟悉 这个多线程问题比较简单 可以用join方法实现 2 在Ja
  • LLM在放射科学中应用潜力

    本论文在全球范围内评估了 31 个大型语言模型 LLM 在解读放射科报告并从放射学发现中推导出诊断信息 impression 任务上的表现 这是目前已知的对全球 LLM 用于放射科学自然语言处理 NLP 进行的最全面评估之一 该研究通过在这
  • 8款常见的自动化测试开源框架

    在如今开源的时代 我们就不要再闭门造车了 热烈的拥抱开源吧 本文针对性能测试 Web UI 测试 API 测试 数据库测试 接口测试 单元测试等方面 为大家整理了github或码云上优秀的自动化测试开源项目 希望能给大家带来一点帮助 一 性
  • 运维体系的构建

    文章目录 一 前言 二 基础 2 1 项目摸底 2 2 做一个好辅助 2 3 学习业务 2 4 标准与流程 2 5 维护 三 进阶 3 1 系统 服务优化 3 2 工作流程优化 3 3 规矩 3 4 运维管理平台 一 前言 运维的基础工作通
  • php lazy loading,React丨用户体验丨hook版 lazy loading

    我们都知道随着单页应用 bundle 的体积不断增大 会造成首次加载时间过长 白屏时间过长 过程中会加载了我们首页没有必要看到的一些 页面 组件 js文件 所以我们需要对 bundle 文件进行拆分来进行按需加载 懒加载 这里需要用到 we
  • Xilinx FIFO Generator 需要注意RST复位

    Xilinx FIFO Generator 需要注意RST复位 系列文章推荐 Xilinx FIFO Generator 需要注意RST复位 Xilinx FIFO Generator 需要注意Actual Depth Xilinx FIF
  • cvCloneImage()内存泄漏解决方法, cvCloneImage()和cvCopy()的区别

    转自 http blog csdn net stellar0 article details 8741759 cvCloneImage 每次使用时编译器会分配新的内存空间 不会覆盖以前的内容 所以如果在循环中使用内存会迅速减小 每次用完都需
  • Python 计算机视觉(六)—— OpenCV 进行图像量化与采样

    对于信号的采样可以参考我之前的文章 数字信号处理 2 1 采样 对于信号的量化可以参考 数字信号处理 2 4 ADC 中的有限字长效应 在本篇文章中绘图使用到了 matplotlib 库 需要了解学习可以参考我之前写的用来总结这个绘图库的文
  • 一文看懂Spark中reduceByKey 和 groupByKey 的区别

    目录 一 先看结论 二 举例 画图说明 1 实现的功能分别是什么 1 groupByKey 实现 WordCount 2 reduceByKey 实现 WordCount 2 画图解析两种实现方式的区别 1 groupByKey 实现 Wo
  • C++深拷贝与浅拷贝以及写时复制

    深拷贝和浅拷贝的优缺点 看了深拷贝 浅拷贝优缺点 我们知道浅拷贝效率高 但涉及到指针引用等会涉及到指针的多次释放导致悬挂指针 深拷贝 不会造成指针悬挂的问题 但会浪费空间以及效率较低的问题 下面看下用到浅拷贝的情况 include
  • TCP通信发送和接收数据(Socket、ServerSocket)、TCP通信案例

    目录 TCP TCP发送接收数据 发送数据 Socket 接收数据 ServerSocket TCP通信案例1 TCP接收数据后给出反馈案例2 TCP接收数据后给出反馈案例3 TCP接收数据后给出反馈案例4 TCP 概述 TCP通信协议是一