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

Java中的TCP通信(网络编程 二)

简介

TCP(传输控制协议)是一种在计算机网络中常用的协议,它提供了可靠的、面向连接的通信(协议信息链接:TCP协议)。在Java中,我们可以使用Socket和ServerSocket类来实现TCP通信。

Java TCP通信关键方法

客户端套接字(Socket)方法:

- Socket(String host, int port):使用指定的主机和端口创建一个客户端套接字。

- Socket(InetAddress address,int port):创建流套接字并将其连接到指定IP指定端口号

- void connect(SocketAddress endpoint):连接到指定的远程套接字地址。

- void setSoTimeout(int timeout):设置套接字的读取超时时间。

- boolean isConnected():检查套接字是否已连接。

- void close():关闭套接字连接。

服务器套接字(ServerSocket)方法:

- ServerSocket(int port):创建一个服务器套接字,绑定到指定的端口。

- Socket accept():侦听客户端的连接请求,并返回与客户端连接的套接字。

- void setSoTimeout(int timeout):设置服务器套接字的超时时间。

- boolean isBound():检查服务器套接字是否已绑定到特定端口。

- void close():关闭服务器套接字。

输入输出流方法(数据处理):

- InputStream getInputStream():返回与套接字关联的输入流。

- OutputStream getOutputStream():返回与套接字关联的输出流。

- void write(byte[] b):将字节数组中的数据写入输出流。

- int read(byte[] b):从输入流中读取数据并存储到字节数组中。

- void flush():刷新输出流,确保数据被发送。

- String readLine():从输入流中读取一行数据。

- void writeBytes(String s):将字符串以字节的形式写入输出流。

- void writeInt(int value):将整数写入输出流。

- int readInt():从输入流中读取整数。

- void writeObject(Object obj):将对象写入输出流。

程序简单设计

客户端设计(后启动)

public class TCPClient {public static void main(String[] args) throws IOException {//创建嵌套字并连接服务端Socket socket=new Socket("127.0.0.1",10000);//获取嵌套字中的输出流,并发送数据OutputStream os = socket.getOutputStream();String message="hello tcp server";byte[] data=message.getBytes();//因为连接已经建立成功,直到往该连接(socket)的输出流里面写数据,服务端就能收到os.write(data,0,data.length);//获取嵌套字中的输入流,处理响应数据InputStream is = socket.getInputStream();byte[] buffer=new byte[1024];//堵塞当前进程,直到IO完成读取数据int length=is.read(buffer);String response=new String(buffer,0,length);System.out.println("服务端响应: "+response);//关闭连接socket.close();}
}

服务端设计(先启动)

public class TCPServer {public static void main(String[] args) throws IOException {//创建服务端嵌套字并监听指定端口ServerSocket serverSocket=new ServerSocket(10000);System.out.println("服务器已启动,等待客户端连接...");//监听客户端的链接(直接堵塞当前进程,知道完成与客户端的连接)Socket clientSocket = serverSocket.accept();//处理客户端请求System.out.println("客户端已连接");InputStream is = clientSocket.getInputStream();byte[] buffer=new byte[1024];int len=is.read(buffer);//读取缓存中的数据并返回数据长度String request=new String(buffer,0,len);System.out.println("客户端请求: "+request);//发送数据到客户端OutputStream os = clientSocket.getOutputStream();String message="Hello tcp Client";byte[] data = message.getBytes();os.write(data,0,data.length);//关闭连接clientSocket.close();serverSocket.close();}
}

相关文章:

Java中的TCP通信(网络编程 二)

简介 TCP(传输控制协议)是一种在计算机网络中常用的协议,它提供了可靠的、面向连接的通信(协议信息链接:TCP协议)。在Java中,我们可以使用Socket和ServerSocket类来实现TCP通信。 Java TCP通信…...

[架构之路-232]:目标系统 - 纵向分层 - 操作系统 - 数据存储:文件系统存储方法汇总

目录 前言: 一、文件系统存储方法基本原理和常见应用案例: 二、Windows FAT文件系统 2.1 概述 三、Linux EXT文件系统 3.1 基本原理 3.2 索引节点表(Inode Table) 3.2.1 索引节点表层次结构 3.2.2 间接索引表的大小和表项…...

【立体视觉(五)】之立体匹配与SGM算法

【立体视觉(五)】之立体匹配与SGM算法 一、立体匹配一)基本步骤二)局部立体匹配三)全局立体匹配四)评价标准1. 均方误差(RMS)2. 错误匹配率百分比(PBM) 二、半全局(SGM)立体匹配一)代价计算二&a…...

苹果系统_安装matplotlib__pygame,以pycharm导入模块

为了更便捷、连贯的进行python编程学习,尽量在开始安装python软件时,将编辑器、模块一并安装好,这样能避免以后版本冲突的问题。小白在开始安装pycharm、pip、matplotlib往往会遇到一些问题,文中列示其中部分bug,供大家…...

常用颜色的英文和十六进制

以下颜色都是按照下面格式所写 # size&#xff1a;文字大小&#xff08;1~7&#xff09;&#xff1b;color&#xff1a;文字颜色 <font size5 colorred>红 red #ff0000</font>红 red #ff0000 橙 orange #ffa500 黄 yellow #ffff00 草绿 springgreen #00FF7F 绿…...

计算机网络第二章思考题

1. 调制与编码分别有何作用&#xff1f; 调制&#xff08;Modulation&#xff09;和编码&#xff08;Coding&#xff09;是通信系统中的两个关键概念&#xff0c;它们分别具有不同的作用和功能&#xff1a; 调制&#xff08;Modulation&#xff09;&#xff1a; 作用&#xff…...

Xcode、终端、Mason、nvim.debug环境路径

Xcode&#xff1a; /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include 终端&#xff1a; /Library/Developer/CommandLineTools/usr/include Mason: /Users/donny/.local/share/nvim/mason/packages/clangd/…...

2023华为OD机试真题-2023(A+B卷)【Java、C++、Go、Python】

【华为OD机试真题-2023(A+B卷)【Java、C++、Go、Python】 该专栏博客已帮助千余名同学通过OD机考 2023年5月,华为OD机考更新为OD统一考试(B卷)。B卷的题目包括两部分: 1.2022年老题库 2.2023新增题目 OD统一考试B卷的题目博主也会及时搜集更新! 以下为OD统一考试(B卷…...

[NISACTF 2022]join-us - 报错注入无列名注入

点击登录&#xff0c;找到注入点 这种框&#xff0c;可以直接爆破关键字&#xff0c;看是否拦截&#xff0c;也可以手动尝试&#xff0c;发现、union、and、or、substr、database等关键字都拦截了 1、学到了&#xff1a;可以用数据库中不存在的表名或者不存在的自定义函数名爆…...

Raid10--Raid01介绍

RAID10  先对磁盘做mirror&#xff0c;然后对整个mirror组做条带化&#xff1b;    比如8块盘    需要分成4个基组&#xff0c;每个基组2块盘&#xff1b;    每个基组先做raid1&#xff0c;再做raid0&#xff0c;4条条带化&#xff1b;    所以&#xff1a;   …...

集群服务器

文章目录 项目名:实现集群服务器技术栈通过这项目你学到(或者复习到)实现功能编码环境json环境muduo库boost库MySql数据库登录mysql&#xff1a;查看mysql服务开启了没有&#xff1f;mysql的服务器及开发包库chat&#xff0c;表 allgroup friend groupuser offlinemessage user…...

大数据Doris(五):开始编译 Doris

文章目录 开始编译 Doris 一、下载Doris的安装包 二、解压缩 三、上传配置文件...

Linux软硬链接和动静态库

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 软硬链接和动静态库 前言正文软硬链接原理使用 文件时间动静态库库介绍静态库静态库制作静态库的使用关于静态链接 动态库动态库制作动态库的使用关于动态链接 补充 最…...

Linux shell编程学习笔记6:查看和设置变量的常用命令

上节我们介绍了变量的变量命名规则、变量类型、使用变量时要注意的事项&#xff0c;今天我们学习一下查看和设置变量的一些常用命令&#xff0c;包括变量的提升&#xff0c;有些命令在之前的实例中已经使用过了。 一、 echo &#xff1a;查看变量的值 语法格式&#xff1a;ech…...

leetcode 416.分割等和子集

416. 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和…...

Java基于SSM+Vue的平时成绩管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

flutter开发实战-webview插件flutter_inappwebview使用

flutter开发实战-webview插件flutter_inappwebview使用 在开发过程中&#xff0c;经常遇到需要使用WebView&#xff0c;Webview需要调用原生的插件来实现。常见的flutter的webview插件是webview_flutter&#xff0c;flutter_inappwebview。之前整理了一下webview_flutter&…...

Selenium 浏览器坐标转桌面坐标

背景&#xff1a; 做图表自动化项目需要做拖拽操作&#xff0c;但是selenium提供的拖拽API无效&#xff0c;因此借用pyautogui实现拖拽&#xff0c;但是pyautogui的拖拽是基于Windows桌面坐标实现的&#xff0c;另外浏览器中的坐标与windows桌面坐标并不是一比一对应的关系&am…...

1.6.C++项目:仿muduo库实现并发服务器之channel模块的设计

项目完整版在&#xff1a; 文章目录 一、channel模块&#xff1a;事件管理Channel类实现二、提供的功能三、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&#xff08;三&#xff09;功能设计 四、代码&#xff08;一&#xff09;框架&#xff08;二…...

Redis代替session 实现登录流程

Redis代替session 实现登录流程 如果使用String&#xff0c;他的value&#xff0c;用多占用一点空间&#xff0c;如果使用哈希&#xff0c;则他的value中只会存储他数据本身&#xff0c;如果不是特别在意内存&#xff0c;其实使用String就可以 设计key的具体细节 在设计这个k…...

理解C++强制类型转换

理解C强制类型转换 文章目录 理解C强制类型转换理解C强制转换运算符1 static_cast1.1. static_cast用于内置数据类型之间的转换1.2 用于指针之间的转换 1.3 用于基类与派生类之间的转换2. const_cast2.1示例12.2 示例2——this指针 3.reinterpret_cast4.dynamic_cast C认为C风格…...

《TCP/IP网络编程》代码实现

文章目录 1. 项目说明1.1 项目特点2. 文件说明2.1 脚本文件2.1.1 `TCP_IP.sln`2.1.2 `xmake.lua`2.1.2.1 编译说明2.1.2.2 运行说明2.1.3 章节说明项目代码已经开源在github上! 微信公众号文章同步发表! 1. 项目说明 根据《TCP/IP网络编程》书籍学习,对其中的代码进行整理,…...

【Python】如何使用PyInstaller打包自己写好的代码

使用PyInstaller打包自己写好的代码 零、需求 最近接到一个小单&#xff0c;需要批量修改文档内容&#xff0c;用Python做好后要打包成exe程序给客户的Win7电脑使用&#xff0c;此时需要用到PyInstaller打包自己的代码&#xff0c;想到还要有给用户试用的需求&#xff0c;所以…...

Java 线程的调度与时间片

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…...

Java项目-文件搜索工具

目录 项目背景 项目效果 SQLite的下载安装 使用JDBC操作SQLite 第三方库pinyin4j pinyin4j的具体使用 封装pinyin4j 数据库的设计 创建实体类 实现DBUtil 封装FileDao 设计scan方法 多线程扫描 周期性扫描 控制台版本的客户端 图形化界面 设计图形化界面 项目…...

记录开发中遇到关于MySQL的一些问题-MySQL版

本篇文章是记录开发中遇到关于MySQL的一些问题&#xff1a; 希望在这篇文章也能够找到你正在查找的问题&#xff0c;解决问题 Good Luck ! 关于Id 的一些问题 数据库并没有直接写SQL&#xff0c;是通过使用IDEA 同一个公司下的数据库软件生成的&#xff08;DataGrip&#xf…...

2023-10-06 LeetCode每日一题(买卖股票的最佳时机含手续费)

2023-10-06每日一题 一、题目编号 714. 买卖股票的最佳时机含手续费二、题目链接 点击跳转到题目位置 三、题目描述 给定一个整数数组 prices&#xff0c;其中 prices[i]表示第 i 天的股票价格 &#xff1b;整数 fee 代表了交易股票的手续费用。 你可以无限次地完成交易&…...

openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT外部支持工具

文章目录 openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT外部支持工具91.1 gs_ctl&#xff08;全量和增量&#xff09;91.2 gs_basebackup91.3 gs_dump91.4 gs_restore openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT…...

PostgreSQL快速入门

PostgreSQL快速入门&#xff1a;轻松掌握强大的开源数据库 PostgreSQL&#xff08;简称Postgres&#xff09;是一款强大、可定制且免费的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;。它以其高级功能、可扩展性和安全性而著称&#xff0c;被广泛用于各种规模的项目…...

MATLAB:线性系统的建模与仿真(含完整程序)

目录 前言实验内容一、先看作业题目要求二、作业正文Modeling LTI systemsEstablish model1.tf(sys2)2. tf(sys3)3.zpk(sys1)4. zpk(sys3)5. ss(sys1)6. ss(sys2)7.[num,den] tfdata(sys1)8.[num,den] tfdata(sys2)9.[num,den] tfdata(sys3)10.[num,den] tfdata(sys1,’v’…...

公司网站建设工作通知/推广渠道怎么写

INF6027作业代写、代写R/RStudio留学生作业、代做R程序设计作业、代写R实验作业Postgraduate coursework, Information SchoolINF6027 Introduction to Data Science (2018-19)Analysis of the UK Police Dataset1. IntroductionThis part of the assessment for INF6027 Intro…...

wordpress数据管理操作/优化科技

一 团队激励&#xff0c;有时候虽然被称为“胡萝卜加大棒”主义&#xff0c;这套做法其实和美国人在伊拉克或阿富汗搞的拉一派打一派的民族主义似乎差不多&#xff0c;似乎大家也不太愿意听&#xff0c;但是没办法&#xff0c;我们有时候还是得承认&#xff0c;这就是一个客观存…...

做我女朋友的网站/客服外包平台

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位主要负责人考试题库是安全生产模拟考试一点通生成的&#xff0c;危险化学品经营单位主要负责人证模拟考试题库是根据危险化学品经营单位主要负责人最新版教材汇编出危险化学品经营单位主要负责人仿…...

石首做网站/星乐seo网站关键词排名优化

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。&#x1f34e;个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知。⛄ 内容介绍电池储能电站功率转换系统(power conversion…...

龙海网站建设/东莞产品网络推广

如果windows10系统电脑正在运行或处理重要文件的话&#xff0c;而你突然临时离开&#xff0c;此时他人不小心误关了你的电脑&#xff0c;会造成很严重的后果。那么&#xff0c;我们该如何限制用户操作让其不能执行关机操作呢&#xff1f;下面&#xff0c;就随小编看看具体方法。…...

pycharm网站开发实例/谷歌代理

eratosthenes最近&#xff0c;我偶然发现Reddit线程指向一个存储库 &#xff0c;该存储库比较了不同语言的Eratosthenes筛网实现的性能。 简而言之&#xff0c;Sieve是一种&#xff08;古老的&#xff09;算法&#xff0c;可以查找所有达到指定极限的素数。 至少可以说&#xf…...