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日

相关文章

  • 一文带你了解Java中的Object类及类中方法

    一文带你了解Java中的Object类及类中方法 什么是Object类? 在Java中,所有的类都继承自Object类,Object类是Java中所有类的祖先类,其定义了所有类都有的基本方法。 Object类中的常用方法 equals()方法 equals()方法用于判断两个对象是否相等。如果两个对象的内容相同,equals方法返回true,否则返回fals…

    Java 2023年5月26日
    00
  • 如何在Java SpringBoot项目中配置动态数据源你知道吗

    当我们使用 SpringBoot 开发项目时,通常会遇到需要动态切换不同数据源的需求。这时候,我们可以通过配置动态数据源来解决这个问题。下面是详细讲解如何在 Java SpringBoot 项目中配置动态数据源的攻略。 1. 引入相关依赖 我们需要引入如下两个 SpringBoot 的依赖: <dependency> <groupId&gt…

    Java 2023年5月20日
    00
  • finalize()方法的执行时机是什么?

    finalize()是Java中Object类的一个方法,用于在对象被垃圾回收之前执行特定的代码,比如关闭文件或释放资源等操作。当垃圾回收器准备回收某个对象时,它会忽略该对象的finalize()方法是否被重写,而是将其放入一个叫作“fianlization queue”的队列中,等待一个名为“Finalizer”的线程来执行它。 以下是finalize()…

    Java 2023年5月10日
    00
  • 掌握这些GitHub搜索技巧,你的开发效率将翻倍!

    作为开发it行业一员,学习借鉴他人项目是很有必要的,所以我们一般都会从github或者Gitee 上面去参考借鉴他人的项目来学习增加自己的项目经验 但是github你真的用对了嘛,他的功能其实很强大!!! githu项目搜索 关键字搜索 在Github搜索栏中输入与您感兴趣的技术相关的关键词,例如“machine learning”或“web develop…

    Java 2023年5月6日
    00
  • jsp ${param.id}用法

    JSP ${param.id}用法 JSP,即Java Server Pages,是一种在HTML页面中插入Java代码的技术。${param.id}是其中非常实用的一种用法,可以将从浏览器发起的GET或POST请求中携带的参数值展示在页面上。 基本用法 在JSP页面中可以使用${param.id}的语法来获取请求参数中“id”的值。例如,如果当前请求的UR…

    Java 2023年6月15日
    00
  • spring boot入门之诞生背景及优势影响

    Spring Boot入门之诞生背景及优势影响 1. 诞生背景 Spring Boot是一个开源Java项目,它是由Spring Framework团队开发的一款快速构建生产级别应用程序的框架。它的诞生背景是为了减少Spring应用程序的复杂性,同时提供一种非常便捷的方式来构建生产就绪的Spring应用程序。 传统的Spring Framework需要进行大…

    Java 2023年5月31日
    00
  • 解析关于java,php以及html的所有文件编码与乱码的处理方法汇总

    解析关于java,php以及html的所有文件编码与乱码的处理方法汇总 在开发web应用时,经常会遇到关于文件编码与乱码的问题。下面是关于Java、PHP和HTML文件编码与乱码的处理方法的汇总。 文件编码 文件编码是指在存储文件时所使用的编码格式。Web开发中,常用的编码格式有UTF-8编码和GB2312编码。 UTF-8编码 UTF-8编码是一种可变长度…

    Java 2023年5月20日
    00
  • 深入浅析SpringBoot中的自动装配

    深入浅析Spring Boot中的自动装配 Spring Boot是一个非常流行的Java框架,它提供了许多自动配置功能,使得开发人员可以更快速地构建应用程序。在本文中,我们将深入探讨Spring Boot中的自动装配。 Spring Boot自动装配的基本概念 在Spring Boot中,自动装配是指根据应用程序的依赖关系自动配置Spring框架的各种组件…

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