Java网络编程:Socket通信从入门到起飞

🌈个人主页 :一条泥憨鱼 (欢迎各位大佬莅临)

🎬精选专栏:数据结构与算法 ,Java,苍穹外卖日记,AI学习,JavaWeb

前言:

很多Java初学者学到网络编程时都会有一种感觉:

看书的时候觉得挺简单,真正写代码的时候完全不知道客户端和服务器是怎么通信的。

尤其是:

  • Socket是什么?

  • TCP和UDP有什么区别?

  • 为什么要建立连接?

  • 聊天软件到底是怎么实现的?

今天我们就来彻底搞懂Java网络编程。

看完这篇文章,你不仅能理解网络通信原理,还能亲手写出一个简单聊天室哦。


一、什么是网络编程?

数据从一个设备发送到另一个设备,这就是网络通信。

而Java网络编程:

本质上就是让两个程序通过网络进行数据交换。


二、为什么需要网络编程?

如果没有网络编程:

复制代码
电脑A
电脑B

彼此完全独立。

无法:

  • 聊天

  • 文件传输

  • 在线游戏

  • 网页访问

  • 视频通话

而有了网络编程:

复制代码
电脑A ←→ 网络 ←→ 电脑B

程序之间就能交流了。


三、网络编程三要素

学习网络编程之前,必须认识三个核心概念。


1、IP地址

IP地址相当于:

设备在网络中的身份证号

例如:

复制代码
192.168.1.100

或者:

复制代码
127.0.0.1

localhost是什么?

很多同学经常看到:

复制代码
localhost

其实就是:

复制代码
127.0.0.1

表示:当前电脑自己


举个例子:

你给自己发消息:

复制代码
我 → 我

对应:

复制代码
127.0.0.1

2、端口号

有了IP还不够,一台电脑上可能运行很多程序。

例如:

复制代码
QQ
微信
浏览器
IDEA
MySQL

网络数据到底给谁?这时候就需要端口。



常见端口:

端口 服务
80 HTTP
443 HTTPS
3306 MySQL
6379 Redis
8080 Tomcat

3、协议

协议可以理解成:

双方约定好的交流规则


常见协议:

TCP
UDP
HTTP
HTTPS
FTP


四、TCP和UDP到底是什么?


TCP


特点:

✅ 安全可靠

✅ 数据不丢失

✅ 顺序正确

❌ 速度稍慢


应用:

复制代码
微信聊天
支付宝
网银
文件传输

UDP


特点:

✅ 快

✅ 开销小

❌ 可能丢包

❌ 顺序可能错乱


应用:

复制代码
直播
语音
视频会议
游戏

五、Socket是什么?

很多人学到这里开始懵,其实特别简单。

Socket翻译过来:套接字

你可以理解成:网络通信的插座



Java网络编程最核心的类:

复制代码
Socket
ServerSocket

六、Socket通信流程

整个过程如下:


七、第一个TCP程序

实现:

复制代码
客户端发送:
你好服务器

服务器回复:
你好客户端

服务端代码

java 复制代码
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) throws Exception {

        // 创建服务器
        ServerSocket serverSocket =
                new ServerSocket(8888);

        System.out.println("服务器启动成功...");

        // 等待客户端连接
        Socket socket =
                serverSocket.accept();

        System.out.println("客户端已连接");

        BufferedReader reader =
                new BufferedReader(
                        new InputStreamReader(
                                socket.getInputStream()));

        String msg = reader.readLine();

        System.out.println("收到消息:" + msg);

        PrintWriter writer =
                new PrintWriter(
                        socket.getOutputStream(),
                        true);

        writer.println("你好客户端");

        socket.close();
        serverSocket.close();
    }
}

客户端代码

java 复制代码
import java.io.*;
import java.net.Socket;

public class Client {

    public static void main(String[] args) throws Exception {

        Socket socket =
                new Socket("127.0.0.1",8888);

        PrintWriter writer =
                new PrintWriter(
                        socket.getOutputStream(),
                        true);

        writer.println("你好服务器");

        BufferedReader reader =
                new BufferedReader(
                        new InputStreamReader(
                                socket.getInputStream()));

        String msg = reader.readLine();

        System.out.println(msg);

        socket.close();
    }
}

八、代码执行流程解析

第一步:服务端启动

java 复制代码
new ServerSocket(8888);

监听8888端口。


第二步:客户端连接

java 复制代码
new Socket("127.0.0.1",8888);

第三步:建立TCP连接

复制代码
客户端 ←→ 服务端

第四步:发送数据

复制代码
writer.println("你好服务器");

第五步:服务端读取

java 复制代码
reader.readLine();

第六步:

返回结果

java 复制代码
writer.println("你好客户端");

整个流程就完成了。


九、实现简单聊天室

真实项目中:一个服务器要服务多个用户,怎么办?


这就是早期聊天室的实现思路。


十、Java网络编程在SpringBoot中的应用

很多同学觉得:

工作中根本没写过Socket。

其实天天都在用。

例如:

复制代码
浏览器
 ↓
SpringBoot

本质上也是网络通信。


访问:

复制代码
http://localhost:8080/user

背后其实就是TCP+Socket+HTTP封装后的结果。

Socket是基础

HTTP是上层协议


十一、面试题汇总

TCP和UDP区别?

TCP:可靠

有连接

速度稍慢
UDP:不可靠

无连接

速度快


Socket是什么?

Socket是网络通信接口。

用于实现客户端与服务器的数据交换。


ServerSocket和Socket区别?

ServerSocket:服务器监听连接

Socket:真正负责通信


为什么TCP可靠?

复制代码
确认机制
重传机制
流量控制
拥塞控制

保证数据正确传输。


HTTP和TCP是什么关系?

复制代码
HTTP
运行在
TCP之上

HTTP负责规则。

TCP负责传输。


十二、实际开发中的网络编程

目前最常见场景:

Web服务器


即时通讯


游戏服务器


物联网


消息中间件

它们的底层都离不开网络通信。


总结

如果只记一句话:

Java网络编程,本质上就是通过Socket让两个程序能够跨网络交换数据。

简单来说,网络编程其实就是客户端和服务器之间的"打电话"。

Socket负责建立电话线路,TCP负责保证通话质量,而HTTP只是双方约定好的聊天规则。

当你真正理解这一层之后,再去学习Tomcat、SpringBoot、Netty、WebSocket,就会轻松很多。

相关推荐
Wang's Blog2 分钟前
Java 中间件之 RabbitMQ 快速入门: MQ 常见技术选型对比
java·中间件·java-rabbitmq
蜗牛互联网3 分钟前
Java Agent 工具调用的 allowlist、参数校验与调用预算
java·开发语言·人工智能·后端·oracle
大文说跨境3 分钟前
多账号环境隔离方案技术选型:指纹浏览器、VPS 与云手机的三种架构对比
java·开发语言·前端
chenbingjie_c6 分钟前
手撕 C++ priority_queue:二叉堆 + 模板仿函数 + 模板特化(保姆级逐函数拆解)
开发语言·c++
骉马代驾12 分钟前
代驾系统长连接实战(二):心跳、断线重连与消息补偿的完整实现
java
ttwuai15 分钟前
Go后台管理系统开源项目有哪些?如何按交付形态筛掉不合适的仓库
开发语言·golang·开源
程序员Sunday18 分钟前
Spring @Transactional 没回滚?按代理调用、异常和传播行为排查
java·后端·spring
冰暮流星27 分钟前
sql之is null 运算符
java·数据库·sql
Rain的Java大神之路28 分钟前
🔥13年Java老兵转型AI Agent:90%的人挂在同一个坑,根本不用学Python!(万字实战复盘,建议收藏)
java·后端·面试
yuniko-n28 分钟前
【Java】关于容器选型:Deque、PriorityQueue、LinkedList
java·开发语言