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

相关文章
|
10天前
|
Java 数据格式
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
15 0
|
16天前
|
JSON NoSQL Java
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法
|
16天前
|
JSON NoSQL Java
Redis17----Redis的java客户端-RedisTemplte的RedisSerializer,赋值的是虎哥,而取出来的是ROSE的原因,使用keys
Redis17----Redis的java客户端-RedisTemplte的RedisSerializer,赋值的是虎哥,而取出来的是ROSE的原因,使用keys
|
2天前
|
存储 弹性计算 大数据
阿里云服务器怎么样?云服务器ECS功能、租用费用全解析
阿里云ECS是弹性计算服务,提供安全可靠的云服务器,包括多种实例规格如经济型、通用型、计算型等,适合不同场景。ECS支持VPC专有网络、快照与镜像、多种付费模式。用户可按需选择计算架构、存储类型,享受灵活的网络控制、自动化数据备份和低成本计算资源。适用于Web应用、在线游戏、大数据分析和深度学习等场景。阿里云提供免费试用和优惠价格,服务众多知名企业,如新浪微博。
|
2天前
|
存储 弹性计算 大数据
阿里云服务器怎么样?全访问解析云服务器ECS功能、租用、优缺点及使用说明
阿里云ECS是弹性计算服务,提供安全可靠的云服务器,包括多种实例规格如经济型、通用型、计算型等,适合不同场景。ECS支持VPC专有网络、快照与镜像、多种付费模式。用户可根据业务需求选择实例、存储类型和网络配置。阿里云服务器适用于Web应用、游戏、大数据和深度学习等场景,提供免费试用和不同优惠套餐。众多知名企业如新浪微博等信赖阿里云服务。更多信息可访问阿里云官方网站。
|
2天前
|
存储 弹性计算 应用服务中间件
阿里云经济型e与通用算力型u1实例长效特价云服务器解析,性能与性价比的完美平衡
阿里云目前有两款深受个人和普通企业用户喜欢的特价云服务器,ECS 经济型e实例2核2G,3M固定带宽,40G ESSD Entry云盘,仅需99元1年。ECS u1实例2核4G,5M固定带宽,80G ESSD Entry盘,仅需199元1年。新老同享,活动期间新购、续费同价。很多用户关心这两款云服务器性能怎么样?本文将对阿里云2024年推出的特价云服务器进行深度解析,从性能、价格、适用场景等多个维度进行详细探讨,以供选择参考。
阿里云经济型e与通用算力型u1实例长效特价云服务器解析,性能与性价比的完美平衡
|
3天前
|
弹性计算 Linux 网络安全
使用阿里云服务器迁移中心SMC将其他云平台业务迁移至阿里云教程参考
现在越来越多的个人和企业用户选择将其他云平台或者服务商的业务迁移到阿里云,但是如何快速且安全完成迁移是很多用户比较关注的问题,我们可以选择使用阿里云提供的服务器迁移中心(Server Migration Center,简称SMC),这个产品是阿里云提供给您的迁移平台,专注于提供能力普惠、体验一致、效率至上的迁移服务,满足您在阿里云的迁移需求。本文为大家展示使用阿里云服务器迁移中心SMC将其他云平台业务迁移至阿里云的教程,以供参考。
使用阿里云服务器迁移中心SMC将其他云平台业务迁移至阿里云教程参考
|
5天前
|
运维 安全 数据挖掘
阿里云轻量应用服务器82元和298元与云服务器99元和199元简介
目前阿里云推出了几款价格极为实惠的轻量应用服务器和云服务器产品,轻量应用服务器有2核2G3M 50GB高效云盘,价格为82元1年;2核4G4M 60GB高效云盘,价格为298元1年;经济型e实例2核2G,40G ESSD Entry盘,3M带宽,价格为99元1年;通用算力型u1实例2核4G,80G ESSD Entry盘,5M带宽,价格为199元1年。这几款云服务器究竟如何?本文将为您进行详细分析,以供参考。
阿里云轻量应用服务器82元和298元与云服务器99元和199元简介
|
3天前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。
|
5天前
|
弹性计算 运维 安全
阿里云ecs使用体验
整了台服务器部署项目上线