重生之我在deepseek中学习java 第十七天之网络编程-Java-E先生的博客
Java
MySQL
大数据
Python
前端
黑科技
大语言模型
    首页 >> 互联网 >> Java

重生之我在deepseek中学习java 第十七天之网络编程

[导读]:Java学习指南-第十七天:网络编程1.网络编程简介网络编程是指编写程序使计算机能够通过网络进行通信。Java提供了丰富的API来支持网络编程,主要包括java.net包中的类。2.TCP/IP协议TCP/IP协议是互联网的基础协议,Java中的网络编程主要基于TCP/IP协议。TCP/IP协议分为四层:应用层:如HTTP、FTP等。传输层:...

Java学习指南-第十七天:网络编程

  1.网络编程简介

  网络编程是指编写程序使计算机能够通过网络进行通信。Java提供了丰富的API来支持网络编程,主要包括java.net包中的类。

  2.TCP/IP协议

  TCP/IP协议是互联网的基础协议,Java中的网络编程主要基于TCP/IP协议。TCP/IP协议分为四层:

  • 应用层:如HTTP、FTP等。

  • 传输层:如TCP、UDP等。

  • 网络层:如IP。

  • 链路层:如以太网。

  3.Socket编程

  Socket是网络编程的基础,用于实现两台计算机之间的通信。Java中的Socket类用于客户端,ServerSocket类用于服务器端。

  3.1服务器端

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(12345)) {
            System.out.println("Server is listening on port 12345...");

            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println("New client connected");

                new ServerThread(socket).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class ServerThread extends Thread {
    private Socket socket;

    public ServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try (InputStream input = socket.getInputStream();
             BufferedReader reader = new BufferedReader(new InputStreamReader(input));
             OutputStream output = socket.getOutputStream();
             PrintWriter writer = new PrintWriter(output, true)) {

            String text;
            while ((text = reader.readLine()) != null) {
                System.out.println("Received: " + text);
                writer.println("Echo: " + text);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

  3.2客户端

import java.io.*;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 12345)) {
            OutputStream output = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(output, true);

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

            BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));

            String text;
            while ((text = consoleReader.readLine()) != null) {
                writer.println(text);
                String response = reader.readLine();
                System.out.println(response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  4.UDP编程

  UDP是一种无连接的协议,数据传输速度快,但不保证数据的可靠性。Java中的DatagramSocket类用于UDP通信。

  4.1服务器端

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer {
    public static void main(String[] args) {
        try (DatagramSocket socket = new DatagramSocket(12345)) {
            System.out.println("UDP Server is listening on port 12345...");

            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

            while (true) {
                socket.receive(packet);
                String received = new String(packet.getData(), 0, packet.getLength());
                System.out.println("Received: " + received);

                String response = "Echo: " + received;
                byte[] responseBytes = response.getBytes();
                DatagramPacket responsePacket = new DatagramPacket(responseBytes, responseBytes.length, packet.getAddress(), packet.getPort());
                socket.send(responsePacket);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  4.2客户端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class UDPClient {
    public static void main(String[] args) {
        try (DatagramSocket socket = new DatagramSocket()) {
            InetAddress serverAddress = InetAddress.getByName("localhost");
            Scanner scanner = new Scanner(System.in);

            while (true) {
                System.out.print("Enter message: ");
                String message = scanner.nextLine();
                byte[] buffer = message.getBytes();
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length, serverAddress, 12345);
                socket.send(packet);

                byte[] responseBuffer = new byte[1024];
                DatagramPacket responsePacket = new DatagramPacket(responseBuffer, responseBuffer.length);
                socket.receive(responsePacket);
                String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
                System.out.println("Response: " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  5.URL编程

  Java中的URL类用于处理URL地址,可以用于读取网络资源。

  5.1读取URL内容

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class URLReader {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://www.example.com");
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

image.png

  7.示例代码

// TCP服务器和客户端代码见3.1和3.2

// UDP服务器和客户端代码见4.1和4.2

// URL读取代码见5.1

  8.总结

  今天的内容涵盖了Java网络编程的基本概念和常用技术,包括Socket编程、UDP编程和URL编程。网络编程是Java编程中非常重要的一部分,务必熟练掌握。明天我们将深入学习Java的数据库编程。

  提示:多动手编写代码,尝试使用不同的网络编程技术解决实际问题,理解网络编程的工作原理和适用场景。

  祝你学习愉快!


本文来自E先生的博客,如若转载,请注明出处:https://javajz.cn

留言区

联系人:
手   机:
内   容:
验证码:

历史留言

欢迎加Easy的QQ