当前位置: 首页 > article >正文

编程自学指南:java程序设计开发,网络编程基础,TCP编程,UDP编程,HTTP客户端开发

编程自学指南:java程序设计开发,网络编程基础

学习目标

  1. 理解网络协议(TCP/IP、UDP)的核心概念

  2. 掌握Socket编程实现客户端与服务端通信

  3. 能够通过多线程处理并发网络请求

  4. 开发简单的网络应用(如聊天程序、文件传输工具)


一、课程引入

1.1 网络编程的应用场景

  • 实时通信:聊天软件、视频会议

  • 数据传输:文件下载、云存储

  • 远程控制:物联网设备管理、服务器监控

1.2 核心概念

  • IP地址:设备的唯一标识(如192.168.1.1

  • 端口号:应用程序的通信入口(0~65535)

  • TCP vs UDP

    • TCP:可靠传输(三次握手),如网页浏览、文件传输

    • UDP:高效但不可靠,如视频流、实时游戏


二、TCP编程

2.1 服务端开发步骤

  1. 创建ServerSocket监听端口

  2. 调用accept()等待客户端连接

  3. 通过输入输出流进行数据读写

  4. 关闭资源

案例1:服务端回声程序(Echo Server)
public class TCPServer {  
    public static void main(String[] args) throws IOException {  
        try (ServerSocket serverSocket = new ServerSocket(8888)) {  
            System.out.println("服务端启动,等待连接...");  
            Socket clientSocket = serverSocket.accept();  
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));  
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);  

            String inputLine;  
            while ((inputLine = in.readLine()) != null) {  
                System.out.println("收到客户端消息:" + inputLine);  
                out.println("【服务端响应】" + inputLine);  // 回声  
            }  
        }  
    }  
}

2.2 客户端开发步骤

  1. 创建Socket连接服务端

  2. 通过输入输出流通信

案例2:TCP客户端
public class TCPClient {  
    public static void main(String[] args) throws IOException {  
        try (Socket socket = new Socket("localhost", 8888)) {  
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));  

            String userInput;  
            while ((userInput = stdIn.readLine()) != null) {  
                out.println(userInput);  
                System.out.println("服务端回复:" + in.readLine());  
            }  
        }  
    }  
}

三、UDP编程

3.1 数据报通信(DatagramSocket)

案例3:UDP消息发送与接收
// 发送端  
public class UDPSender {  
    public static void main(String[] args) throws IOException {  
        DatagramSocket socket = new DatagramSocket();  
        byte[] data = "Hello UDP".getBytes();  
        DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 9999);  
        socket.send(packet);  
        socket.close();  
    }  
}  

// 接收端  
public class UDPReceiver {  
    public static void main(String[] args) throws IOException {  
        DatagramSocket socket = new DatagramSocket(9999);  
        byte[] buffer = new byte[1024];  
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);  
        socket.receive(packet);  
        String msg = new String(packet.getData(), 0, packet.getLength());  
        System.out.println("收到消息:" + msg);  
        socket.close();  
    }  
}

四、HTTP客户端开发

4.1 使用HttpURLConnection

案例4:获取网页内容
public class HTTPClient {  
    public static void main(String[] args) throws IOException {  
        URL url = new URL("https://www.example.com");  
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
        conn.setRequestMethod("GET");  

        try (BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {  
            String line;  
            while ((line = in.readLine()) != null) {  
                System.out.println(line);  
            }  
        }  
    }  
}

五、综合案例:多线程聊天室

5.1 服务端(支持多客户端)

public class ChatServer {  
    private static final List<Socket> clients = new ArrayList<>();  

    public static void main(String[] args) throws IOException {  
        ServerSocket serverSocket = new ServerSocket(8888);  
        System.out.println("聊天室服务端启动...");  

        while (true) {  
            Socket clientSocket = serverSocket.accept();  
            clients.add(clientSocket);  
            new Thread(() -> handleClient(clientSocket)).start();  
        }  
    }  

    private static void handleClient(Socket clientSocket) {  
        try (BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {  
            String msg;  
            while ((msg = in.readLine()) != null) {  
                System.out.println("广播消息:" + msg);  
                broadcast(msg, clientSocket);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  

    private static void broadcast(String msg, Socket sender) {  
        for (Socket client : clients) {  
            if (client != sender) {  
                try {  
                    PrintWriter out = new PrintWriter(client.getOutputStream(), true);  
                    out.println(msg);  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
}

5.2 客户端代码(参考案例2修改)

  • 每个客户端独立线程接收服务端广播消息


六、常见错误与最佳实践

6.1 常见错误

  • 错误1:端口被占用

    new ServerSocket(8888); // 若端口已被占用,抛出BindException

    错误2:未处理Socket超时

socket.setSoTimeout(5000); // 设置读取超时时间,避免无限等待

6.2 最佳实践

  1. 使用try-with-resources自动关闭Socket和流

  2. TCP场景选择

    • 需可靠传输 → TCP(如文件传输)

    • 需低延迟 → UDP(如实时游戏)

  3. 多线程优化:使用线程池(如ExecutorService)管理客户端连接


七、总结与练习

7.1 总结

  • TCP编程:可靠传输,需建立连接(三次握手)

  • UDP编程:高效但不可靠,适合实时场景

  • HTTP客户端:通过URLConnection访问Web服务

7.2 课后任务

  1. 实现一个TCP文件传输工具(客户端发送文件,服务端保存)

  2. 用UDP协议实现简单的时间服务器(客户端请求时间,服务端返回当前时间)

  3. 预习下一节课:反射与注解

7.3 扩展挑战

  • 基于WebSocket实现实时聊天程序(可借助Java EE或Spring框架)


http://www.kler.cn/a/585907.html

相关文章:

  • 基于微信小程序的小区管理系统设计与实现【lw+源码+部署+视频+讲解】
  • 【树莓派Pico FreeRTOS编程】-FreeRTOS移植
  • 建筑管理(2): 施工承包模式,工程监理,质量监督
  • Java实现死锁
  • windows10 清理 C 盘
  • 如何利用互联网大数据进行产品创新
  • 【含文档+PPT+源码】基于微信小程序的驾考在线学习与测试系统的设计与实现
  • 安全中心建设关键技术之态势展示
  • 一窥DeepSeek开源EPLB项目:揭开技术背后的面纱
  • Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组
  • 如何安装旧版本的Pytorch
  • 部署达梦数据库到服务器
  • 房屋交易平台设计与实现(代码+数据库+LW)
  • 静态分析技术:Jadx-GUI高级用法与模式识别
  • 202109 青少年软件编程等级考试C/C++ 三级真题答案及解析(电子学会)
  • 【Visio使用教程】
  • 探索Hyperlane:用Rust打造轻量级、高性能的Web后端框架
  • 分库分表与NewSQL数据库的区别及适用场景
  • Python 3.13实现数据未来预测功能(详细功能实现及环境搭建)
  • Java面向对象编程进阶:深入理解static、单例模式与继承