java实现TCP socket和UDP socket的实例

yizhihongxing

Java实现TCP Socket和UDP Socket是网络编程中非常常见的任务。在此,我将向你介绍Java实现TCP和UDP Socket的完整攻略。

TCP Socket

步骤

Java实现TCP Socket的步骤如下:

1.创建一个ServerSocket对象,绑定IP地址和端口号

ServerSocket serverSocket = new ServerSocket(port, backlog, InetAddress.getByName(ip));

2.调用accept()方法监听客户端请求,并返回一个新的Socket对象

Socket socket = serverSocket.accept();

3.根据Socket对象获取输入输出流进行通信

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));

4.使用输入输出流进行通信(收发消息)

// 发送消息
writer.println("Hello, World!");
writer.flush();

// 接收消息
String message = reader.readLine();

5.关闭Socket以及ServerSocket

socket.close();
serverSocket.close();

示例说明

下面提供一个简单的示例,实现一个TCP Socket客户端和服务器端的简单通信(以字符串形式发送和接收消息):

服务器端

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888, 50, InetAddress.getByName("127.0.0.1"));
        System.out.println("Server started!");

        Socket socket = serverSocket.accept();
        System.out.println("Client connected: " + socket.getInetAddress().getHostAddress());

        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));

        String message = "";
        while (!message.equals("exit")) {
            message = reader.readLine();
            System.out.println("Received message: " + message);
            writer.println("Echo: " + message);
            writer.flush();
        }

        socket.close();
        serverSocket.close();
    }
}

客户端

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 8888);
        System.out.println("Connected to server!");

        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));

        String message = "";
        Scanner sc = new Scanner(System.in);
        while (!message.equals("exit")) {
            System.out.print("Enter message: ");
            message = sc.nextLine();
            writer.println(message);
            writer.flush();

            String reply = reader.readLine();
            System.out.println("Received reply: " + reply);
        }

        socket.close();
    }
}

UDP Socket

步骤

Java实现UDP Socket的步骤如下:

1.创建一个DatagramSocket对象(可以指定本地端口)

DatagramSocket socket = new DatagramSocket(port);

2.发送数据报文(数据+目标地址)

byte[] buf = "Hello, World!".getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName(ip), port);
socket.send(packet);

3.接收数据报文

byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);

4.关闭DatagramSocket

socket.close();

示例说明

下面提供一个简单的示例,实现一个UDP Socket客户端和服务器端的简单通信(以字符串形式发送和接收消息):

服务器端

public class UDPServer {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(8888);
        System.out.println("Server started!");

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

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

            // echo back
            byte[] replyBuf = ("Echo: " + message).getBytes();
            DatagramPacket replyPacket = new DatagramPacket(replyBuf, replyBuf.length, packet.getAddress(), packet.getPort());
            socket.send(replyPacket);
        }

        // socket.close();
    }
}

客户端

public class UDPClient {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket();
        System.out.println("Connected to server!");
        String message = "";

        Scanner sc = new Scanner(System.in);
        while (!message.equals("exit")) {
            System.out.print("Enter message: ");
            message = sc.nextLine();

            byte[] buf = message.getBytes();
            DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 8888);
            socket.send(packet);

            byte[] replyBuf = new byte[1024];
            DatagramPacket replyPacket = new DatagramPacket(replyBuf, replyBuf.length);
            socket.receive(replyPacket);
            String reply = new String(replyBuf, 0, replyPacket.getLength());
            System.out.println("Received reply: " + reply);
        }

        socket.close();
    }
}

以上就是Java实现TCP Socket和UDP Socket的完整攻略以及两个示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现TCP socket和UDP socket的实例 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 浅谈JavaScript的几种继承实现方式

    浅谈JavaScript的几种继承实现方式 JavaScript是一种支持面向对象编程的语言,也支持多种继承实现方式。本文将介绍JavaScript中几种常见的继承实现方式,以及它们的优缺点。 1. 原型链继承 原型链继承是JavaScript最基本、最常见的继承方式。通过让子类原型指向父类实例,从而实现子类继承父类的属性和方法。 实现方式 function…

    other 2023年6月26日
    00
  • c#之stream

    c#之stream 在C#语言中,流(Stream)是处理输入输出(I/O)的机制,它允许我们以统一的方式读写不同类型的数据(例如字节、字符、对象等),不论它们是来自文件、网络、内存还是其他数据源。 Stream的基本概念 Stream是一个抽象基类,它定义了一组用于访问数据流的通用方法和属性。在C#中,常用的Stream子类包括FileStream、Mem…

    其他 2023年3月29日
    00
  • java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径

    获取系统路径字体:在Java中,我们可以使用GraphicsEnvironment类来获取当前系统可用的字体名称,使用方法如下: import java.awt.*; public class FontNameDemo { public static void main(String[] args) { GraphicsEnvironment e = Gra…

    other 2023年6月26日
    00
  • springboot + vue 实现递归生成多级菜单(实例代码)

    下面我将为您详细讲解“springboot + vue 实现递归生成多级菜单”的完整攻略。 简介 本文将介绍如何使用SpringBoot和Vue.js实现递归生成多级菜单。通过该方案,可以生成任意深度的多级菜单。 准备工作 在开始之前,需要下载安装以下软件: JDK 8+ Node.js Vue CLI 创建SpringBoot项目 首先,使用Spring …

    other 2023年6月27日
    00
  • thinkjs+swagger Editor

    使用ThinkJS和Swagger Editor构建API文档站点 随着现代web应用的快速发展,越来越多的开发人员需要访问和理解API文档。正确编写API文档是整个应用程序的关键组成部分,因此,在构建API时应该考虑提供易于阅读和理解的文档。在这篇文章中,我们将介绍如何使用ThinkJS和Swagger Editor构建易于理解和阅读的API文档站点。 什…

    其他 2023年3月28日
    00
  • 关于UDP服务器客户端编程流程介绍

    关于UDP服务器客户端编程流程介绍 1. UDP服务器编程流程 步骤1:创建UDP socket 在使用UDP进行通信前,需要选定一个端口号并创建一个UDP socket。可以使用以下代码创建一个UDP socket: import socket # 创建一个UDP socket server_socket = socket.socket(socket.AF…

    other 2023年6月27日
    00
  • JavaScript中layim之整合右键菜单的示例代码

    下面我将为你详细讲解“JavaScript中layim之整合右键菜单的示例代码”的完整攻略。 前言 layim 是一款适用于WebIM的 UI 框架,用于快速实现聊天界面。在聊天界面中,一些右键菜单的存在是非常必要的,比如选择文字、复制/粘贴、回复消息等等。本文将介绍如何在 layim 中整合右键菜单。 示例代码 layim.chat({ name: ‘田七…

    other 2023年6月27日
    00
  • JavaScript中的this到底是什么(一)

    当然!下面是关于\”JavaScript中的this到底是什么(一)\”的完整攻略,包含两个示例说明。 … … … … … … … … … … … … … … … … … … … … … … … … … … …

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