java实现TCP socket和UDP socket的实例

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的完整攻略以及两个示例。

阅读剩余 75%

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

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

相关文章

  • c++-查找正确安装的boost版本以及如何删除旧版本

    C++ – 查找正确安装的Boost版本以及如何删除旧版本 Boost是一个流行的C++库,提供了许多有用的功能,例如智能指针、容器、算法等。在使用之前,需要正确安装配置Boost库。本文将详细介绍如何查找正确安装的Boost版本以及如何删除旧版本。 查找正确安装的Boost Windows 在Windows上,可以通过以下步骤查找正确安装的Boost版本:…

    other 2023年5月9日
    00
  • win10预览版10151简体中文iso镜像下载地址(64位)

    很抱歉,但我无法提供关于非法软件或盗版内容的下载链接。我鼓励您遵守法律并从官方渠道获取软件。如果您有任何其他问题或需要其他帮助,请随时告诉我。

    other 2023年8月4日
    00
  • animate.css教程

    animate.css教程 animate.css是一个轻量级的CSS动画库,可以帮助开发者快速实现各种动画效果。本文将详细介绍animate.css的使用方法,并提供两个示例说明。 安装 可以通过以下两种方式安装animate.css: 下载animate.css文件,然后将其引入到HTML文件中: <link rel="styleshee…

    other 2023年5月7日
    00
  • FTP主动模式和被动模式区别详解

    FTP主动模式和被动模式区别详解 概述 FTP(File Transfer Protocol)是一种传输文件的协议。在FTP协议中,有两种不同的传输模式,即FTP主动模式和被动模式。这两种模式都具有自己的优势和弱点。 FTP主动模式 FTP主动模式是最常用的模式。在FTP主动模式中,数据传输端口是客户端向FTP服务器开放的。这意味着FTP服务器向客户端主动发…

    other 2023年6月27日
    00
  • windows磁盘I/O的性能评估方法详解

    Windows磁盘I/O的性能评估方法详解 导言 在Windows系统中,磁盘I/O性能评估是一个重要的任务,特别是在涉及到大量读写操作的应用程序中。在本文中,我们将提供一些基本的方法,用于评估Windows系统上的磁盘I/O性能。我们将探讨如何使用不同工具来测试磁盘性能,并提供一些示例帮助您理解其使用方法。 性能测试工具 Windows自带性能测试工具 W…

    other 2023年6月27日
    00
  • vmware虚拟机中的常用文件介绍

    VMware虚拟机中的常用文件介绍攻略 VMware虚拟机是一种虚拟化技术,可以在一台物理计算机上运行多个虚拟机。在本攻略,我们将介绍VMware虚拟机中的常文件,包括虚拟机配置文件、虚拟磁盘文件、快照文件和虚拟机日文件。 虚拟机配置文件 虚拟机文件是虚拟机的主要配置文件,包含虚拟机的硬件配置、网络配置、操作配置等信息。虚拟机配置文件通常有.vmx扩展名,可…

    other 2023年5月8日
    00
  • 像素 分辨率 ppi(像素密度) bpp扫盲

    像素 分辨率 ppi(像素密度) bpp扫盲 什么是像素? 像素(Pixel)是图像图形处理中最小的显示单位。像素可以是数字或者光学系统中的单个光点。在数字图像处理中,像素是计算机中显示图像的基本单位,在显示器或打印机中,一个像素被视为一个独立的圆点。 什么是分辨率? 分辨率(Resolution)是指显示器或打印机中的像素数目。通常,分辨率以水平像素数×垂…

    其他 2023年3月29日
    00
  • 浅谈go build后加文件和目录的区别

    浅谈go build后加文件和目录的区别 在Go语言中,使用go build命令可以将Go源代码编译成可执行文件。在使用go build命令时,可以指定要编译的文件或目录。下面将详细讲解go build后加文件和目录的区别。 编译单个文件 当使用go build命令后加文件名时,表示只编译指定的单个文件。例如: go build main.go 上述命令将只…

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