从零开始学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编程的世界正等着你去征服。

相关文章
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
2926 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
12月前
|
弹性计算 人工智能 前端开发
在阿里云ECS上部署n8n自动化工作流:U2实例实战
本文介绍如何在阿里云ECS的u2i/u2a实例上部署开源工作流自动化平台n8n,利用Docker快速搭建并配置定时任务,实现如每日抓取MuleRun新AI Agent并推送通知等自动化流程。内容涵盖环境准备、安全组设置、实战案例与优化建议,助力高效构建低维护成本的自动化系统。
2398 5
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
14837 33
MCP客户端调用看这一篇就够了(Java版)
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
982 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
存储 网络协议 Java
Java获取客户端IP问题:返回127.0.0.1
总结:要解决Java获取客户端IP返回127.0.0.1的问题,首先要找出原因,再采取合适的解决方案。请参考上述方案来改进代码,确保在各种网络环境下都能正确获取客户端IP地址。希望本文对您有所帮助。
898 25
|
JSON 前端开发 Go
Go语言实战:创建一个简单的 HTTP 服务器
本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
|
Go API 定位技术
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
971 2
|
弹性计算 资源调度 搜索推荐
阿里云ECS中长期成本节省计划解析:从原理到实战,助力企业降本提效
阿里云ECS节省计划的推出为企业用户提供了一种全新的成本优化方案。通过一次性购买的方式享受长期按量付费的折扣权益,客户不仅可以大幅降低ECS资源的使用成本还可以享受更高的灵活性和便捷性。本文将从多个维度深入剖析阿里云ECS节省计划,包括其核心优势、详尽的购买使用指引、与传统付费模式的全面对比,以及一客户成功案例,以供大家了解和参考。