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

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

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

相关文章

  • ARM汇编判断之如何用汇编判断数组中正负数个数

    ARM汇编判断数组中正负数个数的攻略 在ARM汇编中,我们可以使用一些指令和技巧来判断数组中正负数的个数。下面是一个完整的攻略,包含了两个示例说明。 步骤1:初始化计数器 首先,我们需要初始化两个计数器,一个用于记录正数的个数,另一个用于记录负数的个数。我们可以使用寄存器来保存这些计数器的值。 MOV r0, #0 ; 初始化正数计数器为0 MOV r1, …

    other 2023年8月5日
    00
  • ahb总线协议(二)

    ahb总线协议(二) 简介 在我们之前的文章中,我们已经了解了AHB总线协议的基本概念和组成部分。在本篇文章中,我们将深入了解AHB总线协议的更多细节和工作原理。 内容 信号传输 时钟和同步 地址和数据 总线访问类型 单次传输 带宽限制传输 周期传输 总线控制信号 状态信号 主从标识信号 传输类型信号 错误检测信号 总线操作 总线闲置状态 主设备请求 从设备…

    其他 2023年3月28日
    00
  • WinHex查找下载器真实下载地址链接的方法图解

    WinHex查找下载器真实下载地址链接的方法图解攻略 WinHex是一款功能强大的十六进制编辑器和数据恢复工具。在使用WinHex查找下载器真实下载地址链接时,可以按照以下步骤进行操作: 步骤一:打开下载器文件 首先,打开下载器文件(通常是一个可执行文件或者一个安装包),在WinHex中选择“文件”菜单,然后选择“打开”选项。在弹出的对话框中,浏览并选择你要…

    other 2023年8月4日
    00
  • mybatis多层嵌套resultMap及返回自定义参数详解

    MyBatis多层嵌套ResultMap及返回自定义参数详解攻略 在使用MyBatis进行数据库操作时,有时候需要进行多表关联查询,并将结果映射到一个复杂的对象中。MyBatis提供了多层嵌套ResultMap的功能,可以方便地处理这种情况。同时,我们也可以返回自定义参数,以满足特定的业务需求。 1. 多层嵌套ResultMap 多层嵌套ResultMap允…

    other 2023年7月28日
    00
  • IDEA创建web service项目并打包部署到Tomcat

    下面我将详细讲解“IDEA创建web service项目并打包部署到Tomcat”的完整攻略,这里分为如下几个步骤: 第一步:创建Web Service项目 在IntelliJ IDEA中创建Web Service项目,可以按照以下步骤进行: 打开IntelliJ IDEA,点击“Create New Project”按钮; 选择“Java Enterpri…

    other 2023年6月27日
    00
  • MySQL中不能创建自增字段的解决方法

    如何在MySQL创建自增字段 在MySQL中创建表时,我们经常使用自增字段作为主键。但是有时,我们在创建数据库时会发生错误: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server vers…

    other 2023年6月27日
    00
  • ios-上架app之启动页设置(新手必看!)

    iOS-上架App之启动页设置 (新手必看!) 什么是启动页? 启动页是指当用户点击App图标启动App时,显示的第一张界面。在iOS中,启动页也被称为Launch Screen。启动页可以为用户提供启动时的视觉反馈,告诉用户App已经在启动中,并为用户提供一些品牌形象和重要信息。设置一个好的启动页可以让用户对App留下更好的印象,并提高用户的忠诚度。 为什…

    其他 2023年3月28日
    00
  • C++Node类Cartographer开始轨迹的处理深度详解

    “C++Node类Cartographer开始轨迹的处理深度详解”是关于使用C++ Node类库Cartographer中开始轨迹处理的详细攻略。 在Cartographer中,开始轨迹处理包括以下几个步骤: 1.创建一个Cartographer运行时环境 需要使用Cartographer的前提是已经在计算机上安装了Cartographer运行时环境,可以在…

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