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,就会轻松很多。

相关推荐
磊 子1 小时前
STL算法库讲解1
开发语言·c++·算法
Hiter_John1 小时前
Golang的条件判断
服务器·开发语言·golang
Irissgwe1 小时前
7、传输层协议 TC
服务器·网络·tcp/ip
27669582921 小时前
谷歌google cookie逆向角度分析
开发语言·python·google·sgss·谷歌搜索·sg-ss·谷歌cookie逆向
西安邮电大学1 小时前
分布式锁三种实现
java·redis·后端·其他·面试
田里的水稻1 小时前
FA_IPC_协议网络(GRPC)数据交互三
网络·人工智能·机器人
码不停蹄的玄黓1 小时前
SpringBoot 实现自定义注解
java·spring boot·spring
时寒的笔记1 小时前
瑞数案例欧冶解读py和js文件最终版
开发语言·javascript·ecmascript
zmzb01031 小时前
Python课后习题训练记录Day123
开发语言·python