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日

相关文章

  • 使用Ajax实现简单的带百分比进度条实例

    使用Ajax实现简单的带百分比进度条实例 在Web开发中,经常会遇到需要上传大文件或发送复杂请求的情况,此时通常会借助Ajax实现异步上传或异步请求,提高用户体验。而在这个过程中,我们通常会通过进度条来展示任务的进度情况。在本篇文章中,我们将介绍如何使用Ajax实现简单的带百分比进度条实例。 实现步骤 以下是实现带百分比进度条的基本步骤: 创建一个进度条元素…

    Java 2023年6月15日
    00
  • Java避免UTF-8的csv文件打开中文出现乱码的方法

    针对“Java避免UTF-8的csv文件打开中文出现乱码”的问题,可以采取以下两种方法来解决: 方法一:使用OpenCSV库 OpenCSV是一个处理CSV文件的Java第三方库,它可以在读取或写入CSV文件时处理编码问题。可以通过以下步骤来避免在CSV文件打开中文出现乱码。 导入OpenCSV库到你的Java项目中。可以通过在pom.xml文件中添加以下依…

    Java 2023年5月20日
    00
  • Spring集成MyBatis 及Aop分页的实现代码

    Spring集成MyBatis及AOP分页的实现 1. 什么是MyBatis? MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。MyBatis可以通过XML或注解的方式来配置SQL语句和映射关系。 2. Spring集成MyBatis的实现 在Spr…

    Java 2023年5月18日
    00
  • springboot集成springsecurity 使用OAUTH2做权限管理的教程

    Spring Boot是一个非常流行的Java开发框架,它可以帮助开发者快速构建Web应用程序。Spring Security是一个强大的安全框架,它可以帮助开发者实现身份验证、授权和安全管理。OAuth2是一种流行的授权协议,它可以帮助开发者实现安全的API访问和授权管理。以下是Spring Boot集成Spring Security使用OAuth2做权限…

    Java 2023年5月15日
    00
  • java 如何给对象中的包装类设置默认值

    Java中的包装类(Wrapper Class)是为了让基本数据类型(int、double、char等)具有面向对象的特性而出现的。在Java中,包装类和基本数据类型之间可以进行自动装箱和自动拆箱的转换,方便了编程的过程。在某些情况下,我们需要给对象中的包装类设置默认值,下面是详细讲解“Java 如何给对象中的包装类设置默认值”的攻略。 1. 给包装类设置初…

    Java 2023年5月26日
    00
  • Java Apache Commons报错“PatternSyntaxException”的原因与解决方法

    “ParserConfigurationException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 无效的配置:如果配置无效,则可能会出现此错误。在这种情况下,需要检查配置以解决此问题。 无效的输入:如果输入无效,则可能会出现此错误。在这种情况下,需要检查输入以解决此问题。 以下是两个实例: 例1 如果配置无效,则…

    Java 2023年5月5日
    00
  • SpringMVC Tomcat控制台乱码问题解决方案

    SpringMVC Tomcat控制台乱码问题解决方案 在使用SpringMVC和Tomcat时,有时会遇到控制台输出乱码的问题。本文将详细讲解如何解决这个问题,并提供两个示例说明。 1. 问题描述 在使用SpringMVC和Tomcat时,有时会遇到控制台输出乱码的问题。这个问题通常是由于控制台编码与系统编码不一致导致的。 2. 解决方案 要解决这个问题,…

    Java 2023年5月18日
    00
  • Java利用Netty时间轮实现延时任务

    Java利用Netty时间轮实现延时任务 Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于网络编程、RPC等高并发场景。Netty提供了对时间轮数据结构的支持,我们可以基于时间轮实现延时任务功能,本文将详细介绍如何利用Netty时间轮实现延时任务。 时间轮数据结构 时间轮是一种定时器管理方式,将所有的定时器事件按照时间分配到不同的槽中,形成一个…

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