java udppacket_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 classUDPClient {public static voidmain(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 classUDPServer {public static voidmain(String[] args) {try{//1.创建数据报套接字

DatagramSocket socket = new DatagramSocket(9999);//2.创建一个数据报包

byte[] content = new byte[1024];

DatagramPacket datagramPacket= newDatagramPacket(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 classUdpChatClient {public static voidmain(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= newDatagramPacket(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 classUdpChatServer {public static voidmain(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= newDatagramPacket(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 classTestVertify {/**

* 利用传统字符串中方法进行校验。

* 用户名长度不能小于8位,并只能有字母或数字组成

* @param name

* @return*/

public staticboolean 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='a'&&c<='z')||(c>='0'&&c<='9'))){

isCorrect=false;

System.out.println("用户名必须有字母或数字组成!");break;

}

}

}returnisCorrect;

}public staticboolean 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 staticboolean checkMobile(String mobile){

String reg= "1[3|5|7|8]\\d{9}";returnmobile.matches(reg);

}public static voidmain(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("手机号码有误!");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值