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日

相关文章

  • map的key可以重复吗

    以下是详细讲解“Map的key可以重复吗?”的完整攻略,过程中至少包含两条示例说明的标准Markdown格式文本: Map的key可以重复吗? 在Java中,Map是一种常用的数据结构,它用于存储键值对。Map中的key是用于查找和访问value的,那么Map的key可以重复吗?答案是不可以。 Map中的key是唯一的,如果插入一个已经存在的key,那么它会…

    other 2023年5月10日
    00
  • 基于Comparator对象集合实现多个条件按照优先级的比较

    基于Comparator对象集合实现多个条件按照优先级的比较 在Java中,我们可以使用Comparator对象来实现多个条件按照优先级进行比较。Comparator接口是一个函数式接口,它定义了一个compare方法,用于比较两个对象的顺序。我们可以自定义一个Comparator对象,并使用它来排序一个对象集合。 下面是一个完整的攻略,用于实现多个条件按照…

    other 2023年6月28日
    00
  • php进行ip地址掩码运算处理的方法

    PHP进行IP地址掩码运算处理的方法 IP地址掩码运算是一种常见的网络编程操作,用于对IP地址进行过滤、匹配和计算。在PHP中,可以使用位运算符和一些内置函数来进行IP地址掩码运算处理。 1. 将IP地址转换为二进制 首先,我们需要将IP地址转换为二进制形式,以便进行位运算。PHP提供了ip2long()函数来将IP地址转换为32位的无符号整数。 $ip =…

    other 2023年7月30日
    00
  • postman接口做关联测试的方法步骤

    Postman接口做关联测试的方法步骤攻略 Postman是一款常用的API开发和测试工具,它提供了丰富的功能来进行接口测试。在进行关联测试时,我们可以使用Postman的环境变量和脚本功能来实现接口之间的数据传递和关联。下面是使用Postman进行接口关联测试的详细步骤: 步骤一:创建环境变量 打开Postman,点击左上角的齿轮图标,选择\”Manage…

    other 2023年7月29日
    00
  • Android Studio实现简单计算器功能

    Android Studio实现简单计算器功能攻略 1. 创建新项目 首先,在Android Studio中创建一个新的项目。选择\”Empty Activity\”模板,并为项目命名。 2. 布局设计 在res/layout目录下的activity_main.xml文件中,使用XML布局设计计算器的界面。可以使用LinearLayout或者GridLayo…

    other 2023年9月7日
    00
  • mysql5.7.18安装并修改初始密码的方法

    以下是mysql5.7.18安装并修改初始密码的完整攻略。 步骤一:下载安装包 首先,你需要从官网下载合适版本的MySQL安装包,这里以MySQL5.7.18为例,下载链接如下:https://dev.mysql.com/downloads/mysql/5.7.html。 步骤二:安装MySQL 安装MySQL的过程,这里以Mac OS X平台为例: 运行下…

    other 2023年6月20日
    00
  • java实现中缀表达式转后缀的方法

    Java实现中缀表达式转后缀的方法 中缀表达式是我们常见的数学表达式形式,例如2 + 3 * 4。而后缀表达式(也称为逆波兰表达式)是一种将操作符放在操作数之后的表达式形式,例如2 3 4 * +。在计算机科学中,我们通常将中缀表达式转换为后缀表达式,以便更容易进行计算。 下面是一种使用Java实现中缀表达式转后缀表达式的方法: 步骤1:创建一个空的栈和一个…

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