从零开始学Java Socket编程:客户端与服务器通信实战

简介: 【6月更文挑战第21天】Java Socket编程教程带你从零开始构建简单的客户端-服务器通信。安装JDK后,在命令行分别运行`SimpleServer`和`SimpleClient`。服务器监听端口,接收并回显客户端消息;客户端连接服务器,发送“Hello, Server!”并显示服务器响应。这是网络通信基础,为更复杂的网络应用打下基础。开始你的Socket编程之旅吧!

在编程的世界里,网络通信是不可或缺的一环,而Java Socket编程则是掌握这项技能的基石。本篇教程将以“从零开始”的理念,引导你逐步构建一个简单的客户端-服务器通信系统,无需任何先验知识,只需跟随步骤,即可体验Socket编程的魅力。

开始前的准备

在我们开始之前,确保你的开发环境已安装Java JDK。本教程将在命令行下进行,如果你使用的是IDE(如IntelliJ IDEA或Eclipse),也可以在相应的环境中运行代码。

第一步:创建服务器端

首先,我们来创建一个基本的服务器端。服务器的主要任务是监听特定端口上的连接请求,并能接收客户端发来的消息。

import java.io.*;
import java.net.*;

public class SimpleServer {
   
    public static void main(String[] args) {
   
        int port = 12345; // 监听的端口号
        try (ServerSocket serverSocket = new ServerSocket(port)) {
   
            System.out.println("Server started. Listening on port " + port);

            // 等待客户端连接
            Socket clientSocket = serverSocket.accept();
            System.out.println("Client connected.");

            // 创建输入流,用于读取客户端发来的消息
            BufferedReader in = new BufferedReader(
                new InputStreamReader(clientSocket.getInputStream())
            );

            // 创建输出流,用于向客户端发送消息
            PrintWriter out = new PrintWriter(
                new OutputStreamWriter(clientSocket.getOutputStream()), 
                true // 自动刷新缓冲区
            );

            String receivedMessage;
            while ((receivedMessage = in.readLine()) != null) {
   
                System.out.println("Received: " + receivedMessage);
                // 反馈消息给客户端
                out.println("Echo: " + receivedMessage);
            }

            // 关闭连接
            clientSocket.close();
        } catch (IOException e) {
   
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

第二步:创建客户端

接下来,我们构建客户端,它将连接到上面创建的服务器,并发送一条消息,然后接收服务器的反馈。

import java.io.*;
import java.net.*;

public class SimpleClient {
   
    public static void main(String[] args) {
   
        String serverAddress = "localhost"; // 服务器地址
        int port = 12345; // 服务器监听的端口

        try (Socket socket = new Socket(serverAddress, port)) {
   
            System.out.println("Connected to server at " + serverAddress + ":" + port);

            // 创建输出流,用于向服务器发送消息
            PrintWriter out = new PrintWriter(
                new OutputStreamWriter(socket.getOutputStream()), 
                true // 自动刷新缓冲区
            );

            // 创建输入流,用于读取服务器发来的消息
            BufferedReader in = new BufferedReader(
                new InputStreamReader(socket.getInputStream())
            );

            // 向服务器发送消息
            out.println("Hello, Server!");

            // 接收服务器的反馈
            String receivedMessage = in.readLine();
            System.out.println("Received from server: " + receivedMessage);

            // 关闭连接
            socket.close();
        } catch (IOException e) {
   
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

运行程序

现在,你可以先在命令行中运行SimpleServer,然后在另一个终端窗口中运行SimpleClient。观察服务器和客户端的控制台输出,你会发现客户端发送的消息被服务器接收,并原样返回给了客户端。

结语

恭喜你完成了第一个Socket编程项目!通过本教程,你不仅学习了如何创建服务器和客户端,还掌握了基本的网络通信原理。这是你迈向网络编程领域的重要一步。随着经验的积累,你将能够构建更复杂的应用,如多人聊天室、文件传输服务等。继续探索,Java Socket编程的世界正等着你去征服。

相关文章
|
5月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
1082 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
2月前
|
弹性计算 人工智能 前端开发
在阿里云ECS上部署n8n自动化工作流:U2实例实战
本文介绍如何在阿里云ECS的u2i/u2a实例上部署开源工作流自动化平台n8n,利用Docker快速搭建并配置定时任务,实现如每日抓取MuleRun新AI Agent并推送通知等自动化流程。内容涵盖环境准备、安全组设置、实战案例与优化建议,助力高效构建低维护成本的自动化系统。
563 5
|
5月前
|
JSON 前端开发 Go
Go语言实战:创建一个简单的 HTTP 服务器
本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
|
7月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
510 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
8月前
|
人工智能 搜索推荐 程序员
用 Go 语言轻松构建 MCP 客户端与服务器
本文介绍了如何使用 mcp-go 构建一个完整的 MCP 应用,包括服务端和客户端两部分。 - 服务端支持注册工具(Tool)、资源(Resource)和提示词(Prompt),并可通过 stdio 或 sse 模式对外提供服务; - 客户端通过 stdio 连接服务器,支持初始化、列出服务内容、调用远程工具等操作。
1946 4
|
8月前
|
弹性计算 Linux 网络安全
阿里云服务器迁移中心SMC实战指南:跨平台业务迁移教程参考
现在越来越多的个人和企业用户选择将其他云平台或者服务商的业务迁移到阿里云,但是如何快速且安全完成迁移是很多用户比较关注的问题,我们可以选择使用阿里云提供的服务器迁移中心(Server Migration Center,简称SMC),这个产品是阿里云提供给您的迁移平台,专注于提供能力普惠、体验一致、效率至上的迁移服务,满足您在阿里云的迁移需求。本文为大家展示使用阿里云服务器迁移中心SMC将其他云平台业务迁移至阿里云的教程,以供参考。
|
8月前
|
弹性计算 资源调度 搜索推荐
阿里云ECS中长期成本节省计划解析:从原理到实战,助力企业降本提效
阿里云ECS节省计划的推出为企业用户提供了一种全新的成本优化方案。通过一次性购买的方式享受长期按量付费的折扣权益,客户不仅可以大幅降低ECS资源的使用成本还可以享受更高的灵活性和便捷性。本文将从多个维度深入剖析阿里云ECS节省计划,包括其核心优势、详尽的购买使用指引、与传统付费模式的全面对比,以及一客户成功案例,以供大家了解和参考。
|
9月前
|
网络协议 开发者 Python
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
471 10
|
8月前
|
Go API 定位技术
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
492 0