Socket网络编程中的常见应用场景与实例分析

Socket网络编程中的常见应用场景与实例分析

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

Socket编程是网络编程的基础,广泛应用于各种网络应用程序的开发。Socket可以实现客户端和服务器之间的通信,是实现分布式系统、网络服务和实时应用的核心技术。本文将介绍Socket网络编程中的一些常见应用场景,并通过实例代码进行详细分析。

一、常见应用场景

  1. HTTP服务器和客户端

HTTP服务器和客户端之间的通信是通过Socket实现的。服务器监听特定端口,客户端发起请求,服务器返回响应。

  1. 聊天应用

聊天应用是典型的双向通信应用,客户端和服务器之间可以互相发送消息。通过Socket实现消息的实时传输和接收。

  1. 文件传输

通过Socket可以实现文件的上传和下载,客户端发送文件到服务器,或者从服务器下载文件。

  1. 远程控制

远程控制应用通过Socket连接,实现远程设备的控制和管理。比如远程桌面控制、物联网设备控制等。

二、实例分析

下面通过具体实例代码,介绍如何使用Java进行Socket编程。

1. 简单的Echo服务器

Echo服务器接收客户端发送的消息,并将相同的消息返回给客户端。

服务器代码:

package cn.juwatech.socket;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class EchoServer {public static void main(String[] args) {try (ServerSocket serverSocket = new ServerSocket(8080)) {System.out.println("Server started, waiting for client connection...");while (true) {try (Socket clientSocket = serverSocket.accept();BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));OutputStream out = clientSocket.getOutputStream()) {String message = reader.readLine();System.out.println("Received: " + message);out.write((message + "\n").getBytes());}}} catch (Exception e) {e.printStackTrace();}}
}

客户端代码:

package cn.juwatech.socket;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;public class EchoClient {public static void main(String[] args) {try (Socket socket = new Socket("localhost", 8080);OutputStream out = socket.getOutputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {String message = "Hello, Echo Server!";out.write((message + "\n").getBytes());String response = reader.readLine();System.out.println("Received from server: " + response);} catch (Exception e) {e.printStackTrace();}}
}

2. 聊天应用

服务器代码:

package cn.juwatech.socket;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;public class ChatServer {private static List<PrintWriter> clientWriters = new ArrayList<>();public static void main(String[] args) {try (ServerSocket serverSocket = new ServerSocket(8080)) {System.out.println("Chat server started...");while (true) {Socket clientSocket = serverSocket.accept();PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);clientWriters.add(writer);Thread clientHandler = new Thread(() -> handleClient(clientSocket));clientHandler.start();}} catch (Exception e) {e.printStackTrace();}}private static void handleClient(Socket clientSocket) {try (BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {String message;while ((message = reader.readLine()) != null) {System.out.println("Received: " + message);for (PrintWriter writer : clientWriters) {writer.println(message);}}} catch (Exception e) {e.printStackTrace();}}
}

客户端代码:

package cn.juwatech.socket;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;public class ChatClient {public static void main(String[] args) {try (Socket socket = new Socket("localhost", 8080);PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in))) {Thread receiveThread = new Thread(() -> {try {String serverMessage;while ((serverMessage = reader.readLine()) != null) {System.out.println("Received: " + serverMessage);}} catch (Exception e) {e.printStackTrace();}});receiveThread.start();String clientMessage;while ((clientMessage = consoleReader.readLine()) != null) {out.println(clientMessage);}} catch (Exception e) {e.printStackTrace();}}
}

3. 文件传输

服务器代码:

package cn.juwatech.socket;import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class FileServer {public static void main(String[] args) {try (ServerSocket serverSocket = new ServerSocket(8080)) {System.out.println("File server started, waiting for client connection...");while (true) {try (Socket clientSocket = serverSocket.accept();InputStream in = clientSocket.getInputStream();FileOutputStream fileOut = new FileOutputStream("received_file.txt");BufferedInputStream bufferIn = new BufferedInputStream(in)) {byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = bufferIn.read(buffer)) != -1) {fileOut.write(buffer, 0, bytesRead);}System.out.println("File received successfully.");}}} catch (Exception e) {e.printStackTrace();}}
}

客户端代码:

package cn.juwatech.socket;import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;public class FileClient {public static void main(String[] args) {try (Socket socket = new Socket("localhost", 8080);FileInputStream fileIn = new FileInputStream("send_file.txt");BufferedInputStream bufferIn = new BufferedInputStream(fileIn);OutputStream out = socket.getOutputStream()) {byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = bufferIn.read(buffer)) != -1) {out.write(buffer, 0, bytesRead);}System.out.println("File sent successfully.");} catch (Exception e) {e.printStackTrace();}}
}

四、总结

Socket编程是网络编程的基础,广泛应用于各种网络应用中。从简单的Echo服务器到复杂的聊天应用和文件传输,Socket提供了强大的功能和灵活性。通过本文的介绍和实例分析,希望大家能够掌握Socket编程的基本原理和常见应用场景,为开发高效、可靠的网络应用打下坚实的基础。

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

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

相关文章

【C++PCL】点云处理提取点云重叠部分

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 重点:每个模块都有参数如何调试的讲解,即调试某个参数对结果的影响是什么,大家有问题可以评论哈,如果文章有错误的地方,欢迎来指出错误的…

STM32F103点亮LED灯和实现LED闪烁(标准库)

芯片&#xff1a;STM32F103GCT6 原理图&#xff1a; 实现&#xff1a;PC6——闪烁&#xff0c;PC7——常亮 main.c //头文件 #include "stm32f10x.h" #include "user.h"//全局变量 uint8_t g_1s_flag 0; uint8_t g_uart1_rx_done 0;uint32_t g_ms 0…

HarmonyOS--路由管理--组件导航 (Navigation)

文档中心 什么是组件导航 (Navigation) &#xff1f; 1、Navigation是路由容器组件&#xff0c;一般作为首页的根容器&#xff0c;包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式 2、Navigation组件适用于模块内和跨模块的路由切换&#xff0c;一次开发&#xff0…

论文工具使用---connected papers

如何使用connected papers 使用方法具体功能其他资源 官网地址&#xff1a;connected papers &#xff1a;一个旨在帮助科研工作者快速搜索文献的全新工具&#xff0c;可以清晰的查看文献的引文信息&#xff0c;了解文献的引用和被引用关联。 使用方法 输入论文标题后&#xf…

IP配置SSL的方式

近年SSL证书的运用群体越来越多&#xff0c;实现网站https访问已经成为了常态。 目前SSL证书广泛应用在域名服务器上&#xff0c;所以大家最熟悉的证书类型可能就是单域名SSL证书、泛域名SSL证书&#xff08;通配符SSL证书、泛解析SSL证书&#xff09;、以及方便集成化管理的多…

# Sharding-JDBC从入门到精通(3)- Sharding-JDBC 入门程序

Sharding-JDBC从入门到精通&#xff08;3&#xff09;- Sharding-JDBC 入门程序 一、Sharding-JDBC 入门程序&#xff08;水平分表&#xff09;-环境搭建 1、需求说明 使用 Sharding-JDBC 完成对订单表的水平分表&#xff0c;通过快速入门程序的开发&#xff0c;快速体验 Sh…

【吊打面试官系列-MyBatis面试题】#{}和${}的区别是什么?

大家好&#xff0c;我是锋哥。今天分享关于 【#{}和${}的区别是什么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; #{}和${}的区别是什么&#xff1f; #{} 是预编译处理&#xff0c;${}是字符串替换。 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网…

C#正则表达式的基本语法

前言 正则表达式的匹配模式由一系列数字、文字、运算符、字符等的字符组成&#xff0c;根据自己需求设计对应的模式&#xff0c;实现分析、匹配的操作。本文将对正则表达式组成语法进行讲解。 语法规则 正则表达式构建的匹配模式由转义字符、字符类、定位符、分组构造、限定…

.net core 的缓存方案

这里主要讲两个缓存的使用&#xff0c;MemoryCache和Redis 先讲讲常见的缓存 1、.net framework web中自带有Cache缓存&#xff0c;这种缓存属于粘性缓存&#xff0c;是缓存到项目中的&#xff0c;项目从服务器迁移的时候缓存的内容也能够随着服务器一起迁移 2、MemoryCache缓存…

知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(索引)

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…

基于bootstrap的12种登录注册页面模板

基于bootstrap的12种登录注册页面模板&#xff0c;分三种类型&#xff0c;默认简单的登录和注册&#xff0c;带背景图片的登录和注册&#xff0c;支持弹窗的登录和注册页面html下载。 微信扫码下载

【SGX系列教程】(四)Intel-SGX 官方示例分析(SampleCode)——LocalAttestation

文章目录 一.LocalAttestation原理介绍1.1本地认证原理1.2 本地认证基本流程1.3 本地认证核心原理 二.源码分析2.1 README2.1.1 编译流程2.1.2 执行流程&#xff08;双进程执行 or 单进程执行&#xff0c;在后面执行部分有展示效果&#xff09;2.1.3 如何获取已签名的Enclave的…

【SpringBoot】SpringBoot核心启动流程源码解析

SpringBoot总体流程 当我们启动一个SpringBoot程序的时候&#xff0c;只需要一个main方法就可以启动&#xff0c;但是对于其中流程时如何执行的&#xff0c;以及如何调用spring的IOC和AOP机制&#xff0c;本篇带着这个问题来整体体系化的梳理下流程。 SpringBootApplication …

redis的IO多路复用

多路IO复用是一种同时监听多个文件描述符(如socket)的状态变化&#xff0c;并能在某个文件描述符就绪时执行相应操作的技术&#xff0c;在redis中&#xff0c;多路IO复用技术主要用于处理客户端的连接请求和读写操作&#xff0c;以实现高并发&#xff0c;高性能服务&#xff0c…

OFDM技术简介——背景

l 1966 年&#xff0c; R. W. Chang 提出在带限信道中用 正交信号 同时传输 多路数据 的原理&#xff0c;同时这种传输方式保证系统中不存在符号间串扰和子信道间干扰&#xff0c;该技术可以有效提高频谱利用率&#xff0c;可以有效对抗信道多径衰落。 l 1971 年&#xff0c; …

【无标题】c# WEBAPI 读写表到Redis

//c# WEBAPI 读写表到Redis using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using Newtonsoft.Json; using StackExchange.Redis; using System.Data; using System.Web; namespace …

Spring动态代理详解

一&#xff0c;动态代理 我发现Spring框架中的动态代理是一种非常强大的机制&#xff0c;它可以在运行时为接口或类创建动态代理&#xff0c;然后通过这些代理在方法调用前后添加额外的行为。在后续Spring的AOP&#xff08;面向切面编程&#xff09;支持中扮演了关键角色。 二…

农林企业资质提升策略:聚焦农业综合生态乙级认证

1. 深入了解资质要求 首要任务是全面细致地研究乙级资质的最新标准和要求&#xff0c;包括企业规模、技术人员配置、过往项目经验、财务状况、管理体系等具体指标。 2. 专业团队构建 强化技术团队&#xff0c;确保拥有一支包含注册农业工程师、生态学专家、环境工程师、农业…

vue 自定义组件 实现跟使用

新建文件组件 选择器作用 ~ 波浪线这个是选择 li 后面的所有 a标签 调用 到使用的文件下引入 使用 效果

每日算法-插值查找

1.概念 插值查找是一种改良版的二分查找,其优势在于,对于较为均匀分布的有序数列,能够更快地使得mid中间游标快速接近目标值. 2.计算公式 中间游标计算公式. 公式说明: 公式的主要思路是,以第一次定位mid中间游标为例, 在接近平均分配的情况下,左右游标之间的差值表示总计供…