Socket如何实现客户端和服务器间的通信
Socket 是实现网络通信的一种机制,它允许在不同主机之间的进程通过网络进行数据交换。下面我将简要介绍如何使用 Socket 实现客户端和服务器间的通信。
客户端-服务器通信步骤:
服务器端:
创建服务器端 Socket:
-
服务器端通过创建一个
ServerSocket对象来监听指定的端口,等待客户端连接。
ServerSocket serverSocket = new ServerSocket(portNumber);
其中 portNumber 是服务器端监听的端口号。
接受客户端连接:
-
一旦有客户端连接,
ServerSocket就会返回一个Socket对象,该对象代表了和客户端的通信通道。
Socket clientSocket = serverSocket.accept();
这一步是阻塞操作,直到有客户端连接进来才会继续执行。
获取输入输出流:
-
通过
Socket对象,可以获取输入流和输出流,进行数据的读写操作。
InputStream inputStream = clientSocket.getInputStream();
OutputStream outputStream = clientSocket.getOutputStream();
处理客户端请求:
-
在获得了输入流之后,可以从中读取客户端发送的数据,并根据协议进行相应的处理。
关闭连接:
-
处理完毕后,记得关闭
Socket和ServerSocket,释放资源。
clientSocket.close();
serverSocket.close();
客户端:
创建客户端 Socket:
-
客户端通过创建一个
Socket对象来连接到服务器的指定地址和端口。
Socket socket = new Socket(serverAddress, portNumber);
其中 serverAddress 是服务器的地址,portNumber 是服务器端监听的端口号。
获取输入输出流:
-
通过
Socket对象,可以获取输入流和输出流,进行数据的读写操作。
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
发送请求和接收响应:
-
使用输出流向服务器发送数据,使用输入流从服务器接收数据。
关闭连接:
-
处理完毕后,记得关闭
Socket,释放资源。
socket.close();
示例代码:
服务器端代码:
import java.io.*;
import java.net.*;
public class Server {public static void main(String[] args) {int portNumber = 8088;
try (ServerSocket serverSocket = new ServerSocket(portNumber)) {System.out.println("Server listening on port " + portNumber);while (true) {Socket clientSocket = serverSocket.accept();System.out.println("Client connected: " + clientSocket.getInetAddress().getHostAddress());
// 获取输入流InputStream inputStream = clientSocket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));// 读取客户端发送的数据String clientMessage = reader.readLine();System.out.println("Received from client: " + clientMessage);// 获取输出流OutputStream outputStream = clientSocket.getOutputStream();PrintWriter writer = new PrintWriter(outputStream, true);// 发送响应给客户端writer.println("Message received successfully!");// 关闭连接clientSocket.close();}} catch (IOException e) {e.printStackTrace();}}
}
客户端代码:
import java.io.*;
import java.net.*;
public class Client {public static void main(String[] args) {String serverAddress = "127.0.0.1";int portNumber = 12345;
try (Socket socket = new Socket(serverAddress, portNumber)) {System.out.println("Connected to server at " + serverAddress + ":" + portNumber);// 获取输出流OutputStream outputStream = socket.getOutputStream();PrintWriter writer = new PrintWriter(outputStream, true);// 发送数据给服务器writer.println("Hello from client!");// 获取输入流InputStream inputStream = socket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));// 读取服务器响应String serverResponse = reader.readLine();System.out.println("Server response: " + serverResponse);} catch (IOException e) {e.printStackTrace();}}
}
相关文章:
Socket如何实现客户端和服务器间的通信
Socket 是实现网络通信的一种机制,它允许在不同主机之间的进程通过网络进行数据交换。下面我将简要介绍如何使用 Socket 实现客户端和服务器间的通信。 客户端-服务器通信步骤: 服务器端: 创建服务器端 Socket: 服务器端通过创…...
基于Spring boot + Vue的校园论坛
作者的B站地址:程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址:程序员云翼-CSDN博客 1.项目技术栈: 前后端分离的项目 后端:Springboot MybatisPlus 前端:Vue ElementUI 数据库: …...
RabbitMQ高级特性 - 生产者消息确认机制
文章目录 生产者消息确认机制概述confirm 代码实现return 代码实现 生产者消息确认机制 概述 为了保证信息 从生产者 发送到 队列,因此引入了生产者的消息确认机制. RabbitMQ 提供了两种解决方案: 通过事务机制实现.通过发送确认机制(confi…...
webpack的loader机制
webpack的loader机制 loader本质上就是导出函数的JavaScript模块。导出的函数,可以用来实现内容的转换。 /* * param{string|Buffer} content 源文件的内容 * param{object} [map] SourceMap数据 * param{any} [meta] meta数据,可以是任何数据 * */ fu…...
(STM32笔记)十一、通过EXTI外部中断实现 按键控制LED
我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 十一、通过EXTI外部中断实现 按键控制LED 十一、通过EXTI外部中断实现 按键控制LED1、按键模块按键原理图按键程序思路 2、中…...
假如家里太大了,wifi连不上了怎么办
最近有个土豪朋友抱怨,他家里太大了,一个路由器的Wi-Fi信号根本无法覆盖他们家的每个房间,都没办法上网看奥运会比赛了。(还好我是穷人,就没有这种烦恼T_T)。 然后我问他为何不用一个路由器作主路由器&…...
elementPlus 设置el-input文本域固定高度和禁止下拉
elementPlus 设置el-input文本域固定高度和禁止下拉 话不多说直接上代码 // resize"none" 禁止下拉<el-inputv-model"textarea"style"width: 240px"type"textarea"resize"none"placeholder"请输入"/>// 设…...
(转)领导人必过的三道关
为什么企业领导人享受优厚的待遇,为什么董事会对企业领导人千挑万选?因为企业生命如此脆弱,据美国《财 富》杂志报道,世界500强企业平均寿命40年,世界1000强企业平均寿命30年,一般跨国公司平均寿命10年。而就是这脆弱…...
速盾:cdn可以定时刷新缓存吗?
CDN(Content Delivery Network)是一种通过在全球各地分布的服务器上缓存和传送网站内容的技术,以提高用户访问速度和降低服务器负载。CDN的缓存机制可以减少用户对源服务器的请求次数,从而提高网站的响应速度和性能。但是…...
代码随想录算法训练营第二十九天| 62.不同路径、63. 不同路径 II
写代码的第二十九天 继续动归!!! 62.不同路径 思路 解决问题1:dp[i][j]的的含义是什么?本题给的是一个二维的表,判断从左上角走到右下角有多少种路径,所以dp应该是二维数组,dp[i]…...
Go+Redis零基础到用户管理系统API实战_20240730 课程笔记
概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227 基础不好的同学每节课的代码最好配合视频进…...
ScreenAgent:基于LVLM的计算机控制智能体
ScreenAgent : A Vision Language Model-driven Computer Control Agent 论文链接: https://arxiv.org/abs/2402.07945https://arxiv.org/abs/2402.07945IJCAI 2024 1.概述 大型语言模型(LLM),诸如ChatGPT与GPT-4,在自然语言处理领域(涵盖生成、理解及对话等任务)展现出…...
谷粒商城实战笔记-129-商城业务-商品上架-nested数据类型场景
文章目录 扁平化处理扁平化处理导致的检索问题 解决方案:使用 nested 结构 在es的数据类型中有一个nested类型,本讲将重点讨论这个类型。 扁平化处理 PUT my_index/doc/1 {"group" : "fans","user" : [{"first&quo…...
axios请求响应拦截器
目录 axios-拦截器 拦截器的作用 请求拦截器-基本写法: axios请求拦截器-统一设置token 需求: 核心步骤: 关键代码: 响应拦截器-基本写法: axios响应拦截器-统一处理token失效 需求: 核心步骤: 关键代码: axios响应拦截器-数据剥离 需求: 核心步骤: 关键代码: ax…...
Python 中单例模式实现的几种方式
在设计模式中,单例模式是经常被提及和使用的一种模式。它保证一个类只有一个实例,并提供全局访问点。在Python中,有多种实现单例模式的方法。那么,如何选择合适的方法来实现单例模式呢? 单例模式在Python中的几种实现方…...
mysql数据库触发器同步数据
首先检查数据源库是否支持触发器,show ENGINES,如果FEDERATED是NO,表示未开启,如需开启,再mysql配置文件中,添加federated配置到mysqld下面。 一、同服务器不同库触发器同步,这里只举例插入数据…...
Prometheus-v2.45.0+Grafana+邮件告警
目录 普罗米修斯监控架构介绍 Prometheus 监控架构 1. 数据抓取(Scraping) 2. 时序数据库(TSDB) 3. 数据模型 4. PromQL 查询语言 5. 告警(Alerting) 6. Alertmanager 7. 可视化(Visu…...
LeetCode——572. 另一颗树的子树
通过万岁!!! 题目:给你两棵树,然后问subRoot是不是root的子树。也就是root某个节点的所有孩子节点在值和结构上完全与subRoot相同。思路:我的思路比较简单,就是遍历root,遇到root中…...
Spring Boot整合MyBatis-Flex
说明:MyBatis-Flex(官网地址:https://mybatis-flex.com/),是一款数据访问层框架,可实现项目中对数据库的访问,类比MyBatis-Plus。本文介绍,在Spring Boot项目整合MyBatis-Flex。 创…...
重塑未来体验:边缘计算与云原生的完美邂逅
🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、云原生的兴起 2、边缘计算的兴起 二、边缘计算基础 …...
告别复杂配置!intv_ai_mk11一键部署,小白也能轻松体验AI写作
告别复杂配置!intv_ai_mk11一键部署,小白也能轻松体验AI写作 1. 为什么选择intv_ai_mk11 在AI技术快速发展的今天,文本生成模型已经成为内容创作、客服问答、文案撰写等多个领域的得力助手。然而,对于大多数非技术背景的用户来说…...
S2-Pro智能代码助手:VSCode插件开发与Codex使用体验对比
S2-Pro智能代码助手:VSCode插件开发与Codex使用体验对比 1. 开篇:当代码补全遇上大模型 最近在VSCode插件开发中尝试了两款智能代码助手:基于S2-Pro大模型的自研插件和GitHub Copilot(底层采用Codex模型)。实际用下来…...
Qwen3-14B API服务压测报告:QPS 23+,P99延迟<1.2s高并发表现
Qwen3-14B API服务压测报告:QPS 23,P99延迟<1.2s高并发表现 1. 测试环境与配置 1.1 硬件配置 本次压测采用专门优化的Qwen3-14B私有部署镜像,运行在以下硬件环境: GPU:RTX 4090D 24GB显存(与镜像完美…...
终极指南:如何无需Steam客户端轻松下载创意工坊模组
终极指南:如何无需Steam客户端轻松下载创意工坊模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾因Steam客户端无法访问创意工坊而烦恼?或者…...
Wan2.2-I2V-A14B保姆级教程:从云服务器选购(CPU/内存/磁盘)到镜像运行全链路
Wan2.2-I2V-A14B保姆级教程:从云服务器选购到镜像运行全链路 1. 前言:为什么选择私有部署 在当今视频内容需求爆炸式增长的时代,能够快速生成高质量视频内容的能力变得尤为重要。Wan2.2-I2V-A14B作为一款先进的文生视频模型,可以…...
COMSOL 6.1版本皮秒多脉冲激光烧蚀模型:双温变形几何烧蚀模拟系统——电子晶格温度清晰解...
COMSOL 6.1版本 皮秒多脉冲激光烧蚀模型 模型内容:涉及双温模型,变形几何,烧蚀,皮秒脉冲热源,电子、晶格温度 优势:模型注释清晰明了,各个情况都有涉及可参考性极强,可以修改&#x…...
收藏!大模型/后端校招面试,项目这么讲才不浪费优势(小白必看)
这段时间,我全程参与了多场校招后端开发、大模型应用开发岗位的面试复盘工作,越复盘越有一个深刻的感悟:绝大多数候选人,并不是自身项目质量不过关,而是讲述项目的方式彻底走偏,硬生生浪费了自己的核心优势…...
intv_ai_mk11效果实测:技术面试题生成能力——覆盖算法/系统设计/行为问题
intv_ai_mk11效果实测:技术面试题生成能力——覆盖算法/系统设计/行为问题 1. 测试背景与模型介绍 intv_ai_mk11是一款基于Llama架构的AI对话助手,拥有7B参数规模,专门针对技术场景进行了优化。本次测试聚焦于其在技术面试题生成方面的能力…...
分布式系统CAP理论之如何取舍
在分布式系统中,CAP 理论 是一个基石性、指导性的理论,它告诉我们:在设计分布式系统时,无法同时满足三个核心特性,只能在三者之间做权衡。🌐 一、CAP 理论的三个字母代表什么?字母含义说明CCons…...
终极Markdown编辑器rich-markdown-editor:React + Prosemirror强强联合
终极Markdown编辑器rich-markdown-editor:React Prosemirror强强联合 【免费下载链接】rich-markdown-editor The open source React and Prosemirror based markdown editor that powers Outline. Want to try it out? Create an account: 项目地址: https://g…...
