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

编程自学指南: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框架)

相关文章:

  • 扫描电子显微镜有何特点和用途?
  • Hello Mr. My Yesterday日文歌词附假名注音,祭奠逝去的青春
  • Spring 中 BeanFactoryPostProcessor 的作用和示例
  • Qt开发:QtWebEngine中操作选择文本
  • 【QT】文件系统相关 -- QFile
  • 上位机使用QtCharts绘图
  • linux 命令 tail
  • numpy.random 用法
  • 软文推广发布渠道有哪些适合作为首发平台?首发平台有哪些好处?
  • 200多种算法应用于二维和三维无线传感器网络(WSN)覆盖场景
  • Tomcat Session 反序列化漏洞(CVE-2025-24813)
  • ubuntu24.04执行nvidia-smi报错,实际生产报错,处理过程
  • Mybatis 框架学习
  • Android Composable 与 View 的联系和区别
  • 【xv6操作系统】页表与写时拷贝解析及相关实验设计
  • 简单说一说ADSP-BF537的开发
  • 前端无限滚动内容自动回收技术详解:原理、实现与优化
  • 健康医疗:动态代理 IP 保障医疗数据安全,提升远程医疗服务质量!
  • lua C语言api学习2 在C语言中使用lua语言
  • 【eNSP实战】三层交换机使用ACL实现网络安全
  • 牛市早报|年内首次存款利率下调启动,5月LPR今公布
  • 陕西:未来一周高温持续,继续发布冬小麦干热风风险预警
  • 101岁陕西省军区原司令员冀廷璧逝世,曾参加百团大战
  • 受贿1.29亿余元,黑龙江省原副省长王一新被判无期
  • 韩正会见美国景顺集团董事会主席瓦格纳
  • 国家统计局向多省份反馈统计督察意见