java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式)

* TCP
* 特点:面向连接,点对点的通信,效率较低,但安全可靠
* UDP:用户数据报协议,类似于发报机
* 特点:非面向连接,可以广播发送,效率较高,但传输不可靠
* java.net.DatagramSocket: 此类表示用来发送和接收数据报包的套接字。 
* 构造方法:
* DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。
* DatagramSocket(int port, InetAddress laddr) 创建数据报套接字,将其绑定到指定的本地地址。
* 常用的方法:
* send(DatagramPacket p) 从此套接字发送数据报包。
* receive(DatagramPacket p)从此套接字接收数据报包。
* close() 关闭此数据报套接字。

* java.net.DatagramPacket:此类表示数据报包。 
* 构造方法:
* DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) 
构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。 
DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 
DatagramPacket(byte[] buf, int length) 
构造 DatagramPacket,用来接收长度为 length 的数据包。

public class UDPClient {
    public static void main(String[] args) {
        try {
            //1.创建数据报套接字
            DatagramSocket datagramSocket =  new DatagramSocket(6666);
            //2.创建数据报包用于封装数据和目标地址
            String str="hello world!";
            byte[] content = str.getBytes();//将字符串转换为字节的数组
            DatagramPacket datagramPacket = new DatagramPacket(content, content.length,InetAddress.getLocalHost(), 9999);
            //3.调用send方法进行发送数据
            datagramSocket.send(datagramPacket);
            //4.释放资源
            datagramSocket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
 * DatagramSocket(int port)
 * DatagramPacket(byte[] buf, int length)  构造 DatagramPacket,用来接收长度为 length 的数据包。
 * DataPacket类中方法:
 *     getData() 返回数据缓冲区。
 *  getLength()返回将要发送或接收到的数据的长度。
 *  getPort() 返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的
 *  getAddress()返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。
 * 
 */
public class UDPServer {
    public static void main(String[] args) {
        try {
            //1.创建数据报套接字
            DatagramSocket socket = new DatagramSocket(9999);
            //2.创建一个数据报包
            byte[] content = new byte[1024];
            DatagramPacket datagramPacket = new DatagramPacket(content,content.length);
            //3.调用receive方法接收数据包
            socket.receive(datagramPacket);
            //4.从数据报包中获取数据
            byte[] data=  datagramPacket.getData();//获取数据报包中的数据
            int length = datagramPacket.getLength();//
            InetAddress ip = datagramPacket.getAddress();
            int port = datagramPacket.getPort();
            System.out.println("内容:"+new String(data,0,length));
            System.out.println("数据长度:"+length);
            System.out.println("发送方的IP地址:"+ip);
            System.out.println("发送方的端口号:"+port);
            //5.释放资源
            socket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}

利用UDP实现聊天功能:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
 * 利用UDP实现聊天功能
 * @author Administrator
 *
 */
public class UdpChatClient {
    public static void main(String[] args) {
        System.out.println("---------顾客---------");
        try {
            //1.创建数据报套接字
            DatagramSocket socket = new DatagramSocket(6666);
            Scanner input = new Scanner(System.in);
            while(true){
                //2.获取用户输入
                String message = input.next();
                byte[] bs = message.getBytes();
                //3.创建数据报包
                DatagramPacket packet = new DatagramPacket(bs, bs.length, InetAddress.getByName("127.0.0.1"),8888);
                //4.发送数据
                socket.send(packet);
                //接收数据
                byte[] bs2 = new byte[1024];
                DatagramPacket packet2 = new DatagramPacket(bs2, bs2.length);
                socket.receive(packet2);//接收数据
                byte[] serverMesage = packet2.getData();
                String str=new String(serverMesage,0,serverMesage.length);
                System.out.println("客服说:"+str);
                if(message.equals("bye")){
                    break;
                }
            }
            //释放资源
            socket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
 * 利用UDP实现聊天功能
 * @author Administrator
 *
 */
public class UdpChatServer {
    public static void main(String[] args) {
        System.out.println("---------客服---------");
        try {
            //1.创建数据报套接字
            DatagramSocket socket = new DatagramSocket(8888);
            Scanner input = new Scanner(System.in);
            while(true){
                //接收数据
                byte[] bs2 = new byte[1024];
                DatagramPacket packet2 = new DatagramPacket(bs2, bs2.length);
                socket.receive(packet2);//接收数据
                byte[] serverMesage = packet2.getData();
                String str=new String(serverMesage,0,serverMesage.length);
                System.out.println("顾客说:"+str);
                
                //2.获取用户输入
                String message = input.next();
                byte[] bs = message.getBytes();
                //3.创建数据报包
                DatagramPacket packet = new DatagramPacket(bs, bs.length, InetAddress.getByName("127.0.0.1"),6666);
                //4.发送数据
                socket.send(packet);
                if(message.equals("bye")){
                    break;
                }
            }
            //释放资源
            socket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}

  正则表达式:

* 匹配次数的符号: *:0次或多次--->{0,} 
* +:1次或多次 --->{1,}
* ?: 0次或1次 --->{0,1}
* {n}:恰好出现n次
* {n,m}:最少出现n次,最大出现m次
* {n,}:最少出现n次
* 常用的符号:
* . 任何字符(与行结束符可能匹配也可能不匹配) 
* \d 数字:[0-9] 
* \D 非数字: [^0-9] 
* \s 空白字符:[ \t\n\x0B\f\r] 
* \S 非空白字符:[^\s] 
* \w 单词字符:[a-zA-Z_0-9] --->字母,数组和下划线
* \W 非单词字符:[^\w] 
* 字符类:
* [abc] a、b 或 c(简单类) 
* [^abc] 任何字符,除了 a、b 或 c(否定) 
* [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)

public class TestVertify {
    /**
     * 利用传统字符串中方法进行校验。
     * 用户名长度不能小于8位,并只能有字母或数字组成
     * @param name
     * @return
     */
    public static boolean checkUserName(String name){
        boolean isCorrect=true;
        if(name.length()<8){
            isCorrect=false;
            System.out.println("用户名长度不能小于8位!");
        }else{
            //将用户名转换为小写
            String uname = name.toLowerCase();
            for(int i=0;i<uname.length();i++){
                char c = uname.charAt(i);
                if(!((c>='a'&&c<='z')||(c>='0'&&c<='9'))){
                    isCorrect=false;
                    System.out.println("用户名必须有字母或数字组成!");
                    break;
                }
            }
        }
        return isCorrect;
    }
    
    
    public static boolean checkName(String name){
        String reg="[a-zA-Z0-9]{8,20}";//字母和数字组成,长度应该在8位到20位之间。
        boolean is=name.matches(reg);
        return is;
    }
    /**
     * 校验手机号码:11位
     * 13开头,15开头,17开头,18开头,后跟9的数字
     * @param mobile
     * @return
     */
    public static boolean checkMobile(String mobile){
        String reg = "1[3|5|7|8]\\d{9}";
        return mobile.matches(reg);
    }
    public static void main(String[] args) {
//        boolean is =checkUserName("abcedfg123");
//        boolean is = checkName("abcdefg12!");
//        System.out.println("是否通过校验:"+is);
        boolean is=  checkMobile("17112345678");
        if(is){
            System.out.println("手机号码正确!");
        }else{
            System.out.println("手机号码有误!");
        }
    }
}

java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式)的更多相关文章

  1. Java网络编程UDP通信原理

    前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...

  2. java 网络编程 UDP TCP

    网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: ...

  3. Java网络编程——UDP聊天程序

    UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...

  4. java网络编程UDP

    图片来自网络 [发送端] import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSoc ...

  5. java网络编程(UDP详解)

    UDP详解 一,TCP/IP协议栈中,TCP协议和UDP协议的联系和区别? 联系: TCP和UDP是TCP/IP协议栈中传输层的两个协议,它们使用网络层功能把数据包发送到目的地,从而为应用层提供网络服 ...

  6. JAVA网络编程--UDP通信

    首先网络传输数据需了解例如以下三点 1.找到对方IP 2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序用数字进行了标识.为了方便称呼这个数字,叫做port,逻辑por ...

  7. Java网络编程(UDP协议:接收端)

    package WebProgramingDemo; import java.io.IOException; import java.net.DatagramPacket; import java.n ...

  8. Java网络编程(UDP协议:发送端)

    package WebProgramingDemo; import java.io.IOException; import java.net.DatagramPacket; import java.n ...

  9. Java网络编程——UDP实例

    UDPSendDemo import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  10. Java网络编程(UDP协议-聊天程序)

    接收端: package WebProgramingDemo; import java.net.DatagramPacket; import java.net.DatagramSocket; publ ...

随机推荐

  1. 正式一点的my.cnf文件

    感觉比以前的文件,配置正式了一些. 留照. [client] port #socket=/mysql/mysql.sock default-character-set=utf8 [mysqld] po ...

  2. HDU 2887 Watering Hole(MST + 倍增LCA)

    传送门 总算是做上一道LCA的应用题了... 题意:有$n$个牧场, $m$根管道分别连接编号为$u,v$的牧场花费$p_{i}$,在第$i$个牧场挖口井需要花费$w_{i}$,有$P$根管道直接连通 ...

  3. OLED液晶屏幕(1)OLED液晶屏幕ssd1306驱动芯片 arduino运行 ESP8266-07可以 12f不可以

    OLED屏幕有各种形状和尺寸,但目前有两种非常受欢迎的屏幕尺寸. 1)0.96“ 2)1.3“ 他们也有2种常见的颜色 1)蓝色 2)白色 驱动OLED的芯片常用的有两种.这两种芯片有许多非常相似的设 ...

  4. WinDbg常用命令系列---.load, .loadby (Load Extension DLL)

    .load, .loadby (Load Extension DLL) 简介 .load和.loadby命令将新的扩展DLL加载到调试器中. 使用形式 .load DLLName !DLLName.l ...

  5. 【后缀数组】【LuoguP2852】 [USACO06DEC]牛奶模式Milk Patterns

    题目链接 题目描述 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". J ...

  6. Android中LayoutInflater()方法

    在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...

  7. Koa 脚手架创建项目

    Koa 脚手架创建项目 通过应用 koa 脚手架生成工具 可以快速创建一个基于 koa2 的应用的骨架 全局安装koa npm install koa-generator -g //必须安装到全局 创 ...

  8. 刷题记录:[网鼎杯]Fakebook

    目录 刷题记录:[网鼎杯]Fakebook 一.涉及知识点 1.敏感文件泄露 2.sql注入 二.解题方法 刷题记录:[网鼎杯]Fakebook 题目复现链接:https://buuoj.cn/cha ...

  9. ngxtop安装和使用

    监控nginx的请求信息,总共收到了多少个请求,有哪些成功的,有哪些失败的 ngxtop安装 1.安装python-pip 1) yum install epel-release 出现如下错误:No ...

  10. 针对nginx,来具体聊聊正向代理与反向代理 (转载)

    https://www.sohu.com/a/235704408_468627 先来说说什么是代理服务器? 所谓代理服务器就是位于发起请求的客户端与原始服务器端之间的一台跳板服务器,正向代理可以隐藏客 ...