Java简单实现服务器客户端通信

news2024/9/20 1:11:35

目录

    • Socket 概述
    • Socket 通信模型
    • Socket 编程流程
    • DEMO
      • 服务器端
      • 客户端

在Java中实现服务器和客户端的通信,可以使用Java Socket编程。

Socket 概述

Socket 指的是“插座”,是应用层与传输层之间的桥梁,用于在网络上进行双向通信。在 Socket 编程中,客户端与服务器之间的通信需要通过 Socket 进行实现。客户端通过 Socket 向服务器发送请求,服务器接收请求后返回响应,完成整个通信过程。

Socket 通信模型

Socket 通信模型分为两种:TCP 和 UDP。TCP 是一种可靠的传输协议,它保证了数据的完整性和有序性,适用于需要可靠传输的场景;UDP 是一种无连接的传输协议,它不保证数据的完整性和有序性,适用于实时通信、流媒体传输等场景。

Socket 编程流程

Socket 编程流程一般包括以下几个步骤:

创建 Socket 对象(客户端)或 ServerSocket 对象(服务器)。

绑定 Socket 地址。

启动监听进程(服务器)或连接进程(客户端)。

发送或接收数据。

关闭连接。

在这里插入图片描述

DEMO

以下是一个简单的服务器和客户端的例子,它们通过TCP/IP协议通信。

服务器端

Server.java

package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	public static void main(String[] args) {
		int port = 8085;
		try (ServerSocket serverSocket = new ServerSocket(port)){
			System.out.println("服务器启动,等待客户端连接...");
			while(true) {
				try (Socket socket = serverSocket.accept()){
					System.out.println("客户端连接成功!");
					BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    
                    String message;
                    while ((message = in.readLine()) != null) {
                        System.out.println("收到客户端消息: " + message);
                        out.println("服务器回应: " + message);
                    }
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

客户端

Client.java

package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

	public static void main(String[] args) {
		String hostname = "localhost"; // 服务器地址
        int port = 8085; // 服务器端口
        try (Socket socket = new Socket(hostname, port)) {
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

            String userInput;
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);
                System.out.println("服务器回应: " + in.readLine());
            }
        } catch (UnknownHostException e) {
            System.err.println("未知主机: " + hostname);
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println("I/O错误与主机通信");
            e.printStackTrace();
        }

	}

}

在这个例子中,服务器端监听8085端口,等待客户端的连接。客户端连接到服务器后,可以发送消息给服务器,服务器会将收到的消息原样返回给客户端。这个简单的例子展示了基本的Socket编程,但在实际应用中,你可能需要考虑更复杂的协议(如HTTP或自定义协议)和安全性(如SSL/TLS)。

请添加图片描述

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

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

相关文章

Ceph-deploy搭建ceph集群

Ceph介绍及安装 一、Ceph介绍1.1 ceph说明1.2 Ceph架构1.3 Ceph逻辑组织架构1.3.1 Pool1.3.2 PG1.3.3 PGP 二、部署Ceph集群2.1 部署方式:2.2 服务器准备monitor、mgr、radosgw:MDS(相对配置更高一个等级)OSD节点 CPU:…

文献阅读(218)EHP

题目:A Research Retrospective on the AMD Exascale Computing Journey时间:2023会议:ISCA研究机构:AMD 题目:Realizing the AMD Exascale Heterogeneous Processor Vision时间:2024会议:ISCA研…

【人工智能 | 机器学习】神经网络

文章目录 1. 神经元模型2. 感知机与多层网络3. 误差逆传播算法(BP)4. 全局最小与局部极小5. 其他常见神经网络6. 深度学习 1. 神经元模型 神经网络:具有适应性的 简单单元(神经元)组成的广泛并行互连的网络,其组织能够…

微服务组件----网关

小编目前大一,刚开始着手学习微服务的相关知识,小编会把它们整理成知识点发布出来。我认为同为初学者,我把我对知识点的理解以这种代码加观点的方式分享出来不仅加深了我的理解,或许在某个时候对你也有所帮助,同时也欢…

KTV包房开台必点套餐--SAAS本地化及未来之窗行业应用跨平台架构

一、源码 var 未来之窗app_通用ID"";CyberWin_Dialog.layer(url,{type:"url",title:title,move:false,width:"700px",height:"400px",id:未来之窗app_通用ID,mask:true,align:59,hideclose:false}); 二、解释 以下是用修仙手法为您改…

深度学习系列69:tts技术原理

tts为text-to-speech,asr为Automatic Speech Recognition,即speech-to-text。 1. 常用基础模型 下面介绍的deep voice是端到端生成语音的模型,后面两个是生成Mel谱,然后再使用vocoder生成语音的模型。 1.1 Deep voice 目前端到…

Ubuntu安装boost,protobuf、moduo

一、Ubuntu安装muduo muduo库是基于boost开发的,确保先安装了boost(对boost版本有要求),还需要先安装protobuf,curl库 库版本boost1.70.0protobuf3.14.0curl7.74.0muduo2.0.2 1、Ubuntu安装boost # 更新资源列表 s…

【2024-2025源码+文档+调试讲解】微信小程序的城市公交查询系统

摘 要 当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统城市公交查询管理采取了人工的管理方法…

【第0005页 · 贪心】非递减数列

【前言】本文以及之后的一些题解都会陆续整理到目录中,若想了解全部题解整理,请看这里: 第0005页 非递减数列 今天我们来看一道 LeetCode 上“广泛好评”的一道 Easy 题!!!(蓝色是 OJ 平台&…

CentOS 7 升级 OpenSSH 9.8p1

背景 OpenSSH 官方发布安全通告,披露CVE-2024-6387 OpenSSH Server远程代码执行漏洞。 环境 操作系统内核openssh 版本openssl 版本7.8.20033.10.0-11277.4p11.0.2k-fips 安装编译软件和下载 OpenSSH9.8p1 软件包 mkdir -p /data/software cd /data/software/…

安卓13 鼠标右键作返回键,鼠标事件修改

总纲 android13 rom 开发总纲说明 前言 目录 1.前言2.问题分析3.代码分析4.代码修改5.编译1.前言 像有些设备是使用鼠标操作的,但是默认的android 鼠标右键并不是像电脑一样,能够做到,左键是确定,右键是返回

足球比分预测分析理论

走进一个充满欢呼声的体育场,空气中充满了对即将到来的两支强大足球队之间对决的期待。一个引人入胜的问题浮现出来:我们可以在比赛开始之前预测比赛的结果吗? 本文提出了一个基于概率和统计的模型,通过考虑每支队伍的进攻和防守能…

9.2-模型量化学习内容

量化简介 量化是将模型浮点数变为定点数运行的过程。 基本概念 :模型量化可以减少模型尺寸,进而减少在推理时的内存消耗,并且在一些低精度运算较快的处理器上可以增加推理速度。 常见方法:工业界目前最常用的量化位数是8比特&a…

期权权利金要多少?期权保证金和权利金有什么区别?

今天带你了解期权权利金要多少?期权保证金和权利金有什么区别?期权交易中,保证金和权利金是两个核心概念,它们在交易过程中扮演着不同的角色。 期权权利金一般是多少? 期权的买方叫权利金、期权的卖方叫保证金&#…

【Altium Designer脚本开发】——PCB平面绕组线圈 V1.4

PCB平面绕组线圈工具用于生成平面电机线圈,应用场景可参考平面电机的书籍、CNKI论文或平面电机的视频。此工具运行环境在Altium Designer中,可用于Altium Designer全系列的版本中。 以下工具可以定制和试用 原理图文档处理工具 ➡️物料编码自动查找工具…

Fluent 超音速射流噪声仿真分析

1. 摘要 本算例使用ANSYS Fluent 19.0软件,对超音速射流流动进行直接气动声学仿真,文档内包含详细的网格导入、模型选择、材料物性、边界条件、求解参数、后处理的设置。通过仿真计算获得射流流场和射流噪声。 2. 案例描述 本算例仿真的案例为以简化…

【Unity】子物体旋转变形的解决方法

如图,如果父物体缩放不为(1, 1,1),则子物体如果有旋转量,则会在对应坐标轴上产生变形。 解决方案是: 在子物体和父物体节点间多增加一个空节点,保证空节点的世界坐标下的缩放为&…

livox MID-360调试(解决ip设置问题)

整体的调试思路参考大疆Livox Mid360 使用指南_mid360中的imu内参-CSDN博客这篇博客。 但是在调试过程中出现了ip地址设置不对导致的报错: 1.livox viewer中看不到点云数据 2.livox SDK2 bind error。 joeyjoey:~/slam/Livox-SDK2/build/samples/livox_lidar_qu…

hugging face 利用现有模型进行预测

本篇主要记录下如何使用hugging face来快速找到我们需要的模型,并通过已有模型来快速实现demo或是功能模块。贴上hugging face 官网链接: hugging face model界面(需要魔法)需要模板代码请跳转流程总结 目录 1.选择模型 2.创建模型处理器对象 3.使用…

JAVA呵护晚年从智慧开始养老护理代办陪诊陪护小程序

呵护晚年,从智慧开始 —— 养老护理代办陪诊陪护小程序全解析 👵 【开篇:岁月静好,智慧护航】 随着时光的流转,家中的长辈渐渐步入晚年。如何给予他们最贴心的关怀与照顾,成为了我们心中的头等大事。今天…