java实现TCP交互

服务器端 

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.PriorityQueue;
import java.util.Scanner;public class TCP_Server {private ServerSocket serverSocket=null;public TCP_Server(int port) throws IOException {serverSocket=new ServerSocket(port);}public void start() throws IOException {System.out.println("服务器启动");while (true){//通过accept方法,把内核建立好的连接拿到应用程序中//建立连接细节由内核完成Socket clientSocket=serverSocket.accept();//实现连接Thread t=new Thread(()->{try {processConnection(clientSocket);} catch (IOException e) {throw new RuntimeException(e);}});t.start();}}public void processConnection(Socket clientSocket) throws IOException {//打印日志,表示客户端连接成功System.out.printf("[%s:%d] 客户端上线\n",clientSocket.getInetAddress(),clientSocket.getPort());//数据交互try (InputStream inputStream = clientSocket.getInputStream()) {try (OutputStream outputStream = clientSocket.getOutputStream()) {//客户端可能发来多条数据,要循环处理while (true) {Scanner scanner = new Scanner(inputStream);if (!scanner.hasNext()) {//连接断开,循环结束break;}//1.读取请求解析,这里用next,因为当客户端输入空拍夫结束输入String request = scanner.next();//2.根据请求返回响应String reponse = process(request);//3.返回客户端//把字节数组写入到 OutputStreamPrintWriter printWriter = new PrintWriter(outputStream);//这里println是给客户端不是打印//println带有\n是为了客户端接收的时候以空白符结束printWriter.println(reponse);//刷新缓冲区,写道硬盘printWriter.flush();//4.打印交互内容System.out.printf("[%s:%d] req=%s,resp=%s\n", clientSocket.getInetAddress(), clientSocket.getPort(), request, reponse);}} catch (IOException e) {throw new RuntimeException(e);}finally {clientSocket.close();}}}private String process(String request) {//回显服务器return  request;}public static void main(String[] args) throws IOException {TCP_Server tcpServer=new TCP_Server(800);tcpServer.start();}
}

 客户端

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;public class Tcp_Client {private Socket socket=null;public Tcp_Client(String serverIp,int serverPort) throws IOException {//三次握手细节由内核自动完成socket=new Socket(serverIp,serverPort);}public void start() throws IOException {Scanner scanner=new Scanner(System.in);try( InputStream inputStream=socket.getInputStream();OutputStream outputStream=socket.getOutputStream()){PrintWriter writer=new PrintWriter(outputStream);Scanner scanner1=new Scanner(inputStream);while (true){//1.从控制台读入用户输入内容System.out.print("->");String request=scanner.next();//2.把字符串请求发给服务器,用println是为了带上\n与服务器scanner.next呼应writer.println(request);writer.flush();//3.读取服务器请求String response=scanner1.next();//4.显示返回内容System.out.println(response);}}}public static void main(String[] args) throws IOException {Tcp_Client tcpClient=new Tcp_Client("127.0.0.1",800);tcpClient.start();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode每日一题】 递归 - 二叉树剪枝(难度⭐⭐)(50)

1. 题目解析 题目链接:814. 二叉树剪枝 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 想象一下,你有一堆层层叠叠的积木,你想从底部开始,把那些标记为0的积木拿走。如…

C++奇迹之旅:我与类和对象相遇

文章目录 📝面向过程和面向对象初步认识🌠 类🌉类的引入🌉类的定义 🌠类的访问限定符🌠访问限定符 🌠类的两种定义方式🌉封装 🚩总结 📝面向过程和面向对象初…

spring cloud gateway openfeign 联合使用产生死锁问题

spring cloud gateway openfeign 联合使用产生死锁问题&#xff0c;应用启动的时候阻塞卡住。 spring.cloud 版本如下 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><vers…

国际数字影像产业园以数字影像技术,重构文创生活

国际数字影像产业园区&#xff0c;作为树莓集团与成都市金牛区人民政府合作的重点项目&#xff0c;于2023年3月正式在金牛区落地生根。这一园区不仅是第五代产业园区的代表&#xff0c;更是数字影像相关产业服务的特色园区&#xff0c;其独特的定位和宏大的愿景“以数字影像技术…

达梦关键字(如:XML,EXCHANGE,DOMAIN,link等)配置忽略

背景&#xff1a;在使用达梦数据库时&#xff0c;查询SQL中涉及XML,EXCHANGE,DOMAIN,link字段&#xff0c;在达梦中是关键字&#xff0c;SQL报关键词不能使用的错误。 解决办法&#xff1a; 配置达梦安装文件E:\MyJava\dmdbms\data\DAMENG\dm.ini 忽略这些关键词&#xff0c;…

景联文科技:为AI大模型提供高质海量训练数据

在全球AI浪潮的推动下&#xff0c;大量训练数据已成为AI算法模型发展和演进中的关键一环。 艾瑞咨询数据显示&#xff0c;包括数据采集、数据处理&#xff08;标注&#xff09;、数据存储、数据挖掘等模块在内的AI基础数据服务市场&#xff0c;将在未来数年内持续增长。 预计到…

MySQL典型示例

目录 1.使用环境 2.设计表 3.创建表 4.准备数据 5.查询 1.使用环境 数据库&#xff1a;MySQL 8.0.30 客户端&#xff1a;Navicat 15.0.12 2.设计表 假设我们已经建好了一个名为test的数据库。我们添加如下几个表&#xff1a;教师、课程、学生、班级、成绩。实体联系图设…

跨平台私人ChatGPT应用ChatGPT-Next-Web

什么是 NextChat (ChatGPT Next Web) &#xff1f; NextChat (ChatGPT Next Web) 是可以一键免费部署的跨平台私人 ChatGPT 应用, 支持 GPT3, GPT4 & Gemini Pro 模型。 准备 因为老苏没有 OpenAI Key&#xff0c;所以使用 FreeGPT35 来提供无限免费的 GPT-3.5-Turbo API …

qt调试日志文件生成

系列文章目录 第一章 qt日志文件生成功能 文章目录 系列文章目录前言一、qt日志文件生成功能二、使用步骤1.代码示例2.运行截图 前言 qt有固定的调试日志接口&#xff0c;可以通过终端去打印&#xff0c;但是仅适用在本地去调试&#xff0c;例如想长期放到测试台去检测&#…

如何给MySQL数据库的所有表统一加上字段

在开发过程中&#xff0c;有时候慢慢的建了很多数据库表&#xff0c;但是后来发现需要统一增加某些字段的时候&#xff0c;可以通过alter语句 ALTER TABLE 表名 ADD 列名 数据类型;比如我要给t_user表增加gmt_create与gmt_modified字段&#xff0c;用作记录新增记录时间与更新…

【机器人】PyBullet四足机器狗仿真

随着科技的迅猛发展&#xff0c;机器人技术正日益成为现实生活中的重要组成部分。而在机器人研究领域&#xff0c;仿真技术的应用扮演着不可或缺的角色。它不仅可以节约大量资源和成本&#xff0c;更为工程师和研究者提供了一个安全、高效的实验平台。在这个博客中&#xff0c;…

hanlp中文分词器(ing...)

目前的工作中需要对文本进行分词分析词性,找出热词,经过一系列的调研感觉hanlp这个库还不错,想先试用看看 介绍 HanLP&#xff08;Han Language Processing&#xff09;是一个由一系列模型与算法组成的NLP工具包&#xff0c;目标是普及自然语言处理在生产环境中的应用。HanLP…

工地安全监测识别摄像机

工地安全监测识别摄像机是一种在建筑工地和施工现场广泛使用的智能监控设备&#xff0c;主要用于监测施工过程中可能出现的安全隐患和违规行为&#xff0c;以确保工地人员和设备的安全。通过高清摄像头、智能算法和远程监控系统的结合&#xff0c;该摄像机可以实时监测工地各个…

电商社交新零售:创新引领新趋势,变革新零售思维格局-亿发

新零售O2O模式是如何颠覆传统零售商业模式&#xff1f; 传统电商出现瓶颈&#xff1a; 传统电商在发展过程中逐渐出现了瓶颈&#xff0c;主要表现在市场竞争激烈、用户获取成本上升、用户黏性下降等问题。传统电商往往只能通过价格竞争或促销活动来吸引用户&#xff0c;而这种…

重构数据访问层-优化数据访问的开发

重新整理了一下过去开发的框架&#xff0c;在准备开发新项目时候&#xff0c;重新整理了一下思路&#xff0c;感觉数据访问层还是很鸡肋。过去几年中&#xff0c;急于完成项目开发和交付&#xff0c;框架都是迭代过来的&#xff0c;虽然满足了开发需求&#xff0c;但是&#xf…

软考118-上午题-【软件工程】-能力成熟度模型

一、考试题型 选择题&#xff08;13题&#xff09; 二、能力成熟度模型CMM 能力成熟度模型CMM的研究目的是&#xff1a;提供一种评价软件承接方能力的方法&#xff0c;同时它可帮助软件组织改进其软件过程。 CMM 将软件过程改进分为以下5个成熟度级别&#xff1a; 1、初始级…

二叉树的遍历——bfs广度优先搜索

1、BinNode类的创建 &#xff08;1&#xff09;代码总览 ##&#xff08;2&#xff09;测试示例 2、二叉树的遍历 &#xff08;1&#xff09;图示 &#xff08;2&#xff09;代码总览 &#xff08;3&#xff09;测试示例

ai智能电销机器人的核心技术,工作原理和作用

科技快速发展的同时&#xff0c;带来了人工智能产品的普及。而ai智能电销机器人则成为推进电销行业的产物&#xff0c;那么ai智能电销机器人是如何帮助企业高效触客&#xff0c;有效地工作&#xff0c;效果又如何呢&#xff1f;我们一起来看看吧&#xff01; 一、ai智能电销机器…

区块链与数字身份:探索Facebook的新尝试

在数字化时代&#xff0c;随着区块链技术的崛起&#xff0c;数字身份成为了一个备受关注的话题。作为全球最大的社交媒体平台之一&#xff0c;Facebook一直在探索如何利用区块链技术来改善数字身份管理和用户数据安全。本文将深入探讨Facebook在这一领域的新尝试&#xff0c;探…

二叉树的遍历的递归与非递归算法

一.二叉树的遍历&#xff1a; 按照一定规律对二叉树的每个结点进行访问且仅访问一次&#xff1b; 这里的访问&#xff1a;可以是计算二叉树中的结点数据&#xff0c;打印该结点的信息&#xff0c;也可以是对结点进行的任何其它操作&#xff01; 为什么需要遍历二叉树&#x…