java使用UDP实现点对点通信

本文实例为大家分享了java使用UDP实现点对点通信的具体代码,供大家参考,具体内容如下

整体的结构思路:

Stu和Tea是收发消息的两端;

Stu和Tea类都是通过启动两个线程完成通信的,这两个线程分别是发消息线程和收消息线程;

Stu类中启动的两个线程分别写在两个类里,Tea也是这样做。

Stu端及其收发消息代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
 
public class Stu {
 
    public static void main(String[] args) throws IOException {
        new Thread(new StuSendThread("127.0.0.1", 8888)).start();
        new Thread(new StuReceiverThread(8889)).start();
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
 
 
public class StuReceiverThread implements Runnable{
 
    private int port;
 
    public StuReceiverThread(int port) {
        this.port = port;
    }
    
    @Override
    public void run() {
        // 创建接收方
        DatagramSocket socket;
        try {
            socket = new DatagramSocket(port);
            while(true) {
                // 准备容器
                byte[] buf = new byte[1024];
                DatagramPacket dPacket = new DatagramPacket(buf, buf.length);
                // 阻塞式接受数据
                try {
                    socket.receive(dPacket);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                // 分析数据
                System.out.println(new String(buf));
                if (new String(buf).equals("exit")) {
                    break;
                }
            }
            // 释放资源
            socket.close();
        } catch (SocketException e1) {
            e1.printStackTrace();
        }        
    }    
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
 
public class StuSendThread implements Runnable{
 
    private DatagramSocket socket;
    private BufferedReader br;
    String IP;
    int port;
    
    public StuSendThread(String IP, int port) throws SocketException {
        socket = new DatagramSocket();
        br = new BufferedReader(new InputStreamReader(System.in));
        this.IP = IP;
        this.port = port;
    }
    
    @Override
    public void run() {        
        while(true) {
            // 准备数据
            br = new BufferedReader(new InputStreamReader(System.in));
            String msg;
            try {
                msg = br.readLine();
                byte[] data = msg.getBytes();
                // 封装数据
                DatagramPacket dPacket = new DatagramPacket(data, data.length, InetAddress.getByName(IP), port);
                // 发送数据
                socket.send(dPacket);
                if(msg.equals("exit")) {
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
        
        // 关闭资源
        try {
            br.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
 
}

Tea端及其收发消息代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
 
public class TeaSendThread implements Runnable{
    private DatagramSocket socket;
    private BufferedReader br;
    String IP;
    int port;
 
    public TeaSendThread(String IP, int port) throws SocketException {
        socket = new DatagramSocket();
        br = new BufferedReader(new InputStreamReader(System.in));
        this.IP = IP;
        this.port = port;
    }
 
    @Override
    public void run() {
        while (true) {
            // 准备数据
            br = new BufferedReader(new InputStreamReader(System.in));
            String msg;
            try {
                msg = br.readLine();
                byte[] data = msg.getBytes();
                // 封装数据
                DatagramPacket dPacket = new DatagramPacket(data, data.length, InetAddress.getByName(IP), port);
                // 发送数据
                socket.send(dPacket);
                if (msg.equals("exit")) {
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
 
        }
 
        // 关闭资源
        try {
            br.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }
 
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
 
public class TeaReceiverTread implements Runnable{
    private int port;
 
    public TeaReceiverTread(int port) {
        this.port = port;
    }
    
    @Override
    public void run() {
        // 创建接收方
        DatagramSocket socket;
        try {
            socket = new DatagramSocket(port);
            while(true) {
                // 准备容器
                byte[] buf = new byte[1024];
                DatagramPacket dPacket = new DatagramPacket(buf, buf.length);
                // 阻塞式接受数据
                try {
                    socket.receive(dPacket);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                // 分析数据
                System.out.println(new String(buf));
                if (new String(buf).equals("exit")) {
                    break;
                }
            }
            // 释放资源
            socket.close();
        } catch (SocketException e1) {
            e1.printStackTrace();
        }        
    }    
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
 
public class TeaSendThread implements Runnable{
    private DatagramSocket socket;
    private BufferedReader br;
    String IP;
    int port;
 
    public TeaSendThread(String IP, int port) throws SocketException {
        socket = new DatagramSocket();
        br = new BufferedReader(new InputStreamReader(System.in));
        this.IP = IP;
        this.port = port;
    }
 
    @Override
    public void run() {
        while (true) {
            // 准备数据
            br = new BufferedReader(new InputStreamReader(System.in));
            String msg;
            try {
                msg = br.readLine();
                byte[] data = msg.getBytes();
                // 封装数据
                DatagramPacket dPacket = new DatagramPacket(data, data.length, InetAddress.getByName(IP), port);
                // 发送数据
                socket.send(dPacket);
                if (msg.equals("exit")) {
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
 
        }
 
        // 关闭资源
        try {
            br.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java UDP通信客户端与服务器端实例分析

    本文实例讲述了java UDP通信客户端与服务器端.分享给大家供大家参考,具体如下: 最初Udp是以字节为单位进行传输的,所以有很大的限制 服务器端: import java.net.*; public class TestUdpServer { public static void main(String[] args) throws Exception { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(

  • Java实现UDP通信过程实例分析【服务器端与客户端】

    本文实例讲述了Java实现UDP通信过程.分享给大家供大家参考,具体如下: TCP是一种面向连接的传输层协议,而UDP是传输层中面向无连接的协议,故传送的数据包不能保证有序和不丢失,实现UDP通信主要用到了两个类:DatagramPacket和DatagramSocket. DatagramSocket 这个类用来表示发送和接收数据包的套接字. //构造方法,创建数据报套接字并将其绑定到本地主机上的指定端口 DatagramSocket socket = new DatagramSocket(0

  • Java模拟UDP通信示例代码

    Java基础:模拟UDP通信 1.一次发送,一次接收 1.1.发送方 // 发送端,不需要连接服务器 public class UdpClientDemo {     public static void main(String[] args) throws Exception {         // 1. 发送数据包需要一个Socket         DatagramSocket socket = new DatagramSocket();         // 1.2 建立一个包    

  • java 基础知识之网络通信(TCP通信、UDP通信、多播以及NIO)总结

    java 基础知识之网路通信总结 在这篇文章里,我们主要讨论如何使用Java实现网络通信,包括TCP通信.UDP通信.多播以及NIO. TCP连接 TCP的基础是Socket,在TCP连接中,我们会使用ServerSocket和Socket,当客户端和服务器建立连接以后,剩下的基本就是对I/O的控制了. 我们先来看一个简单的TCP通信,它分为客户端和服务器端. 客户端代码如下: 简单的TCP客户端 import java.net.*; import java.io.*; public class

  • java实现基于UDP协议网络Socket编程(C/S通信)

    一.前言:认识UDP UDP,全称User Datagram Protocol(用户数据报协议),是Internet 协议集支持一个无连接的传输协议.UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法. UDP主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向报文的简单不可靠信息传送服务.UDP 协议基本上是IP协议与上层协议的接口,适用端口分别运行在同一台设备上的多个应用程序. 二.UDP的特点(与TCP相比) 正是UDP提供不可靠服务

  • java使用UDP实现点对点通信

    本文实例为大家分享了java使用UDP实现点对点通信的具体代码,供大家参考,具体内容如下 整体的结构思路: Stu和Tea是收发消息的两端: Stu和Tea类都是通过启动两个线程完成通信的,这两个线程分别是发消息线程和收消息线程: Stu类中启动的两个线程分别写在两个类里,Tea也是这样做. Stu端及其收发消息代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRead

  • 基于Java中UDP的广播形式(实例讲解)

    UDP---用户数据报协议,是一个简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地 ,也不能保证数据包到达的顺序.由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快. 在Java中UDP的实现: * UDP: * 客户端: * 1.创建用于UDP通信的socket对象---DatagramSocket(用于UDP数据的发送和接收)---数据报套接字 * 2.准备数据,封装包

  • java利用udp实现发送数据

    本文实例为大家分享了java利用udp实现发送数据的具体代码,供大家参考,具体内容如下 1.udp的特点 数据以包的形式发送数据 udp是面向无连接的 udp会丢失数据,是一种不安全的连接 udp的传输速度较快 2.发送端 package cn.uu710.SocketTest; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.

  • Java实现UDP互发消息

    本文实例为大家分享了Java实现UDP互发消息的具体代码,供大家参考,具体内容如下 UDP的发送端 package udp; /** UDP发送端 */ import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; public class UdpClient { public static void ma

  • Java 基于UDP协议实现消息发送

    发短信:不用连接,但需要知道对方的地址,客户端.服务端没有明确的界限,可以说没有客户端.服务端一说. 发送端 package lesson03; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 发送端 */ public class UdpClientDemo1 { public static void main(String[] args) th

  • Java实现UDP多线程在线咨询

    本文实例为大家分享了Java实现UDP多线程在线咨询,供大家参考,具体内容如下 1.发送的线程 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import jav

  • java基于UDP实现在线聊天功能

    本文实例为大家分享了java基于UDP实现在线聊天的具体代码,供大家参考,具体内容如下 效果图: 一.学习UDP的简单使用步骤 接收端: DatagramSocket socket = null;         try {             //1.开启自己的端口(客户端连接的端口)             socket = new DatagramSocket(9999);             //2.接收数据             byte[] buffer = new byt

  • java Socket UDP实例详解

    UDP编程示例 服务器端: package socket; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPServer { public static void main(String[] args) throws IOException { byte[] buf

随机推荐