java Socket编程(udp篇)

作者: zhangxiao | 来源:发表于2017-07-24 18:48 被阅读94次

概述

关于网络的基础知识,请自行google,这里通过socket(udp)来实现一个简单的对话。

Udp协议的Socket

服务端五步走:
1.初始化DatagramSocket,指定端口号
2.创建用于接收消息的DatagramPacket,指定接收数据大小
3.接收客户端消息
4.创建用于发送消息的DatagramPacket
5.向客户端发送消息

package udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;

public class Server {
    private static DatagramSocket mSocket;

    public static void main(String[] args) {
        try {
            // 1.初始化DatagramSocket,指定端口号
            mSocket = new DatagramSocket(8888);
            // 2.创建用于接收消息的DatagramPacket,指定接收数据大小
            
            // 3.接收客户端消息
            System.out.println("***************服务器开始监听消息***************");
            while (true) {
                byte[] receiveData = new byte[1024];
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                mSocket.receive(receivePacket);// 在接收到信息之前,一直保持阻塞状态
                System.out.println("客户端说:" + new String(receiveData));
                HandleThread handleThread = new HandleThread(receivePacket);
                handleThread.setPriority(4);
                handleThread.start();
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            mSocket.close();// 关闭资源
        }
    }

    static class HandleThread extends Thread {
        private DatagramPacket mPacket;
        private DatagramSocket mSocket;

        public HandleThread(DatagramPacket packet) {
            super();
            mPacket = packet;
        }

        @Override
        public void run() {
            try {
                // 4.创建用于发送消息的DatagramPacket
                byte[] sendData = "hello,我是服务端".getBytes();
                SocketAddress remoteAddress = mPacket.getSocketAddress();
                DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, remoteAddress);
                // 5.向客户端发送消息
                mSocket = new DatagramSocket();
                mSocket.send(sendPacket);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (mSocket != null) {
                    mSocket.close();// 关闭资源
                }
            }
        }
    }
}

客户端五步走:
1.初始化DatagramSocket
2.创建用于发送消息的DatagramPacket
3.向服务端发送消息
4.创建用于接收消息的DatagramPacket
5.接收服务端消息

package udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class Client {

    private static DatagramSocket mSocket;

    public static void main(String[] args) {
        try {
            // 1.初始化DatagramSocket
            mSocket = new DatagramSocket();
            mSocket = new DatagramSocket();
            // 2.创建用于发送消息的DatagramPacket
            InetSocketAddress address = new InetSocketAddress("localhost", 8888);
            byte[] sendData = ("hello,我是客户端" + (int) (Math.random() * 100)).getBytes();// 随机数模拟不同的客户端
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address);
            // 3.向服务端发送消息
            mSocket.send(sendPacket);
            // 4.创建用于接收消息的DatagramPacket
            byte[] receiveData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            // 5.接收服务端消息
            mSocket.receive(receivePacket);
            System.out.println("服务端说:" + new String(receiveData));
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        } finally {
            if (mSocket != null) {
                mSocket.close();
            }
        }
    }

}

测试一下

先启动服务端,再启动客户端(多次启动,模拟多用户访问服务器)
服务端打印:

image.png

客户端打印:

image.png

相关文章

  • Java socket

    Java Socket实现基于TCP和UDP多线程通信Java Socket编程

  • Java中的UDP编程

    Java中的UDP编程 Java为我们提供了DatagramSocket对象作为基于UDP协议的Socket,可以...

  • java Socket编程(udp篇)

    概述 关于网络的基础知识,请自行google,这里通过socket(udp)来实现一个简单的对话。 Udp协议的S...

  • 网络编程

    网络 Socket 基于TCP协议的Socket编程 基于UDP协议的Socket编程

  • 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通...

  • UDP

    好文推荐# 【Java TCP/IP Socket】UDP Socket(含代码)黑马程序员——UDP发送数据,接...

  • Java基础09网络编程

    Java 基础08GUI 熟练掌握什么是网络编程,网络编程的三要素,Socket原理机制、UDP传输、TCP传输等...

  • (三)即时通讯系列之UDPSocket

    即时通讯系列之Socket简介 转自他人 1. UDP Socket编程 先讲一讲UDP编程,因为比TCP要简单多...

  • JAVA Socket 实现 UDP 编程

    作者:qq_23473123来源:CSDN原文:https://blog.csdn.net/qq_23473123...

  • Day18总结

    一.网络通信过程TCP协议和UDP协议二.socket编程 1.socket编程定义:socket又叫套接字。指的...

网友评论

    本文标题:java Socket编程(udp篇)

    本文链接:https://www.haomeiwen.com/subject/gwkpkxtx.html