Java小白第一次就能看懂的网络编程

Java小白第一次就能看懂的网络编程攻略

什么是网络编程

网络编程指的是利用计算机网络进行通讯和信息交换的程序设计。Java中的网络编程是通过Java自带的网络库进行开发。 Java中的网络编程有两种:基于TCP协议的Socket编程和基于UDP协议的DatagramSocket编程。

Socket编程

Socket编程是指采用TCP协议来进行编程,是一个基于流的网络编程模型,主要用于端到端的数据传输和通信。

建立一个Socket连接

在Java中,可以通过构造函数创建一个Socket连接对象,示例代码如下:

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

其中,127.0.0.1表示要连接的IP地址,8000表示要连接的端口号。

发送数据

利用Java中的OutputSteam类可以将消息写入到Socket连接中,示例代码如下:

OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println("Hello World");
printWriter.flush();

其中,PrintWriter是一个输出流。在这里,我们可以将需要发送的消息使用printWriter.println()方法写入流中,并且调用flush()方法将其发送出去。

接收数据

利用Java中的InputStream类可以从Socket连接中读取数据,示例代码如下:

InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String message = bufferedReader.readLine();
System.out.println(message);

其中,BufferedReader是一个输入流。这里我们可以使用readLine()方法从输入流中获取一行数据,然后将其输出到控制台。

DatagramSocket编程

DatagramSocket编程是基于UDP协议进行编程的,是一个不可靠的、无连接的网络编程模型。

创建一个DatagramSocket对象

在Java中,我们使用构造函数创建一个DatagramSocket对象,示例代码如下:

DatagramSocket socket = new DatagramSocket();

发送数据

使用DatagramPacket对象将需要发送的数据打包,并调用DatagramSocket对象的send方法发送数据。

byte[] buffer = "Hello World".getBytes();
int port = 8000;
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
socket.send(packet);

接收数据

使用DatagramPacket对象接收数据,示例代码如下:

DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
socket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
System.out.println(message);

其中,new byte[1024], 1024表示接收数据的缓冲区大小。packet.getData()可以获取到接收到的数据,new String(packet.getData(), 0, packet.getLength())将其转换成字符串并输出到控制台。

示例说明

示例一:Socket编程

下面是一个简单的Socket编程的示例,服务器端和客户端可以互相发送消息,并将其输出到控制台中。

服务器端代码:

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

public class Server {

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8000);
        System.out.println("服务器在8000端口监听");
        Socket socket = serverSocket.accept();
        System.out.println("客户端已连接");

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
        BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            String message = bufferedReader.readLine();
            System.out.println("客户端说:" + message);
            System.out.println("请输入回复:");
            String reply = consoleReader.readLine();
            printWriter.println(reply);
            printWriter.flush();
        }
    }
}

客户端代码:

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

public class Client {

    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 8000);

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
        BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            System.out.println("请输入消息:");
            String message = consoleReader.readLine();
            printWriter.println(message);
            printWriter.flush();

            String reply = bufferedReader.readLine();
            System.out.println("服务器回复:" + reply);
        }
    }
}

示例二:DatagramSocket编程

下面是一个简单的DatagramSocket编程的示例,服务器端和客户端可以互相发送消息,并将其输出到控制台中。

服务器端代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Server {

    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket(8000);
        System.out.println("服务器在8000端口监听");

        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        while (true) {
            datagramSocket.receive(packet);
            String message = new String(packet.getData(), packet.getOffset(), packet.getLength());
            System.out.println("客户端说:" + message);

            System.out.println("请输入回复:");
            System.in.read(buffer);
            DatagramPacket replyPacket = new DatagramPacket(buffer, buffer.length, packet.getSocketAddress());
            datagramSocket.send(replyPacket);
        }
    }
}

客户端代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Client {

    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket();

        byte[] buffer = new byte[1024];
        while (true) {
            System.out.println("请输入消息:");
            System.in.read(buffer);
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("127.0.0.1"), 8000);
            datagramSocket.send(packet);

            DatagramPacket replyPacket = new DatagramPacket(new byte[1024], 1024);
            datagramSocket.receive(replyPacket);
            String reply = new String(replyPacket.getData(), replyPacket.getOffset(), replyPacket.getLength());
            System.out.println("服务器回复:" + reply);
        }
    }
}

通过以上示例,可以初步了解Java中网络编程的基本知识,使得Java小白也可以轻松实现网络编程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java小白第一次就能看懂的网络编程 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 怎么破解Webshell密码 Burpsuite破解Webshell密码图文教程

    下面是详细讲解“怎么破解Webshell密码 Burpsuite破解Webshell密码图文教程”的完整攻略。 破解Webshell密码的背景 Webshell是一种常用的网络攻击工具,黑客们通过上传Webshell来获取网站的控制权。而为了保护Web服务器的安全,管理员们往往会在Webshell中设置密码。当管理员忘记密码的时候,如何破解Webshell密…

    Java 2023年6月16日
    00
  • Spring中使用腾讯云发送短信验证码的实现示例

    下面我将为您详细讲解在Spring中使用腾讯云发送短信验证码的实现示例,并提供两个示例给您参考。 腾讯云SMS SDK介绍 在Spring中使用腾讯云发送短信验证码,需要使用腾讯云的SMS SDK。腾讯云的SMS SDK是专为开发人员和企业用户量身打造的短信发送解决方案,它提供了多种方式发送短信,包含了API接口、SDK、控制台等多种方式,并且可以满足不同场…

    Java 2023年5月20日
    00
  • springmvc fastjson 反序列化时间格式化方法(推荐)

    SpringMVC Fastjson 反序列化时间格式化方法 1. 什么是Fastjson? Fastjson是一个Java语言编写的高性能JSON处理器,它可以将Java对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为Java对象。Fastjson具有快速、简单、灵活等特点,是目前Java开发中最流行的JSON处理器之一。 2. Spri…

    Java 2023年5月18日
    00
  • java web SpringMVC后端传json数据到前端页面实例代码

    下面我将详细讲解“java web SpringMVC后端传json数据到前端页面实例代码”的攻略,包含以下内容: 前置条件 后端代码实现 前端页面代码实现 示例说明 1. 前置条件 首先需要确保你已经安装好了JDK和SpringMVC框架,并且对于前端页面的开发,需要掌握HTML、CSS、JavaScript等技术。 2. 后端代码实现 下面我们以一个简单…

    Java 2023年5月26日
    00
  • Java 模拟数据库连接池的实现代码

    这里为大家介绍一下 Java 模拟数据库连接池的实现代码的完整攻略。 准备工作 在开始实现之前,我们需要引入一些必要的类库和工具,这些工具包括: java.sql 包中的 JDBC API,用于连接数据库。 com.zaxxer.hikari.HikariConfig, com.zaxxer.hikari.HikariDataSource, com.zaxx…

    Java 2023年5月19日
    00
  • java 线程详解及线程与进程的区别

    Java 线程详解及线程与进程的区别 线程和进程的概念 在操作系统中,进程可以被看作是一个执行中的程序,它所占用的内存空间中包含了代码,数据,和系统资源等等。而线程则是进程中的执行单元,进程中可以拥有多个线程。 线程与进程的两个最重要的区别如下: 一个进程可以有多个线程,各个线程可以并发执行 一个进程内的线程共享该进程所占用的资源 Java 线程的创建和启动…

    Java 2023年5月18日
    00
  • Java实用工具之StringJoiner详解

    Java实用工具之StringJoiner详解 在Java中,如果需要将多个字符串连接成一个字符串,可以使用String类中的concat方法或加号+运算符进行字符串拼接。但是当我们需要连接的字符串数量较多,或者需要在每个字符串之间添加一定的分隔符时,这两种方法就显得有些麻烦。 针对这种情况,Java提供了一个实用工具类StringJoiner,它可以轻松地…

    Java 2023年5月26日
    00
  • R语言3.6.3安装超详细教程附安装包

    下面是详细的“R语言3.6.3安装超详细教程附安装包”的完整攻略。 准备 首先,你需要下载R语言的安装包。可以前往R官网下载对应版本的R语言安装包。 安装 双击运行下载好的R语言安装包; 选择“ Agree”同意协议; 选择安装位置; 在“Select Components”中,推荐选择默认的安装模式; 此时,“Start Menu Folder”中会出现R…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部