您的位置:首页 > 理论基础 > 计算机网络

黑马程序员——Java 网络通信 正则表达式

2012-07-11 11:02 411 查看
---------------------- android培训java培训、期待与您交流! ----------------------
IP地址:InetAddress

127.0.0.1 主机默认IP

localhost

端口 0 ---65535

UDP

* 将数据及源和目的封装成数据包中,不需要建立连接

* 每个数据报的大小在限制在64k内

* 因无连接,是不可靠协议

* 不需要建立连接,速度快

TCP

* 建立连接,形成传输数据的通道。

* 在连接中进行大数据量传输

* 通过三次握手完成连接,是可靠协议

* 必须建立连接,效率会稍低

OSI Tcp/IP

应用层 表

表示层 示

会话层 层

传输层 传输层

网络层 网络层

数据链路层 主机到网络

物理层 层

OSI七层

TCP/IP五层

两个例子关于UDP TCP

import java.net.*;

class UdpSend

{

public static void main(String[] args) throws Exception

{

//1.创建udp服务,通过DatagramSocket对象

DatagramSocket ds = new DatagramSocket(8888);

//2确定数据并封装成数据包

//DatagramPacket(byte[] buf,int length,InetAddress address,int port)

byte[] buf = "udp ge men lai le".getBytes();

DatagramPacket dp =

new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.101"),10000);

//3.通过socket服务,将已有的数据包发送出去,通过send方法。

ds.send(dp);

//4关闭资源

ds.close();

}

}

/*

需求:定义一个应用程序,用于接收udp协议传输的数据并处理

定义udp的接收端

思路

1.定义udpsocket服务,通常会监听一个端口,其实就是给这个接收网络

应用程序定义数字标示。方便于明确哪些数据过来应用程序可以处理。

2.定义一个数据包,因为要存储接收到的字节数据。

因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。

3.通过socket服务中的receive方法将接收到数据存入已定义好的数据包中。

4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上。

5.关闭资源。

*/

class UdpRece

{

public static void main(String[] args) throws Exception

{

//创建udp socket,建立端点

DatagramSocket ds = new DatagramSocket(10000);

//定义数据包,用于存储数据。

byte[] buf = new byte[1024];

DatagramPacket dp = new DatagramPacket(buf,buf.length);

//通过服务的recevie方法将接收到数据存入数据包中

ds.receive(dp);

//通过数据包的方法获取其中的数据

String ip = dp.getAddress().getHostAddress();

String data = new String(dp.getData(),0,dp.getLength());

int port = dp.getPort();

System.out.println(ip+"::"+data+"::"+port);

ds.close();

}

}

import java.io.*;

import java.net.*;

/*

服务端和客户端互访。

需求,客户端给服务端发送数据,服务端收到后,给客户端反馈信息

*/

/*

客户端

1.建立socket服务,指定要连接的主机和端口。

2.获取socket流中的输出流,将数据写入到该流中。通过网络发送给服务端。

3.获取socket流中的输入流,将服务端反馈的数据获取到,并打印。

4.关闭客户端资源。

*/

class TcpClient2

{

public static void main(String[] args) throws Exception

{

Socket s = new Socket("192.168.1.101",10004);

OutputStream out = s.getOutputStream();

out.write("服务端你好".getBytes());

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

int len = in.read(buf);

System.out.println(new String(buf,0,len));

s.close();

}

}

class TcpServer2

{

public static void main(String[] args) throws Exception

{

ServerSocket ss = new ServerSocket(10004);

Socket s = ss.accept();

String ip = s.getInetAddress().getHostAddress();

System.out.println(ip+" is connecting");

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

int len = in.read(buf);

System.out.println(new String(buf,0,len));

OutputStream out = s.getOutputStream();

out.write("哥们收到,你也好".getBytes());

s.close();

ss.close();

}

}

正则表达式

专门操作字符串

1.匹配 String matches

[ b c d ] b或c 或d

[a-z] a-z之间的任意一个

[^ a b c ] 非 a b c

2.切割可以将规则封装成一个组。用()完成。组的出现都有编号。

从1开始。 想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取。

3替换 String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组
4.获取 将字符串中符合规则的子串取出
(1)正则表达式封装成对象
(2)正则对象和操作的字符串相关联
(3)关联后,获取正则匹配引擎
(4)通过引擎,对符合规则的子串进行操作。

将规则封装成对象。

Pattern p = Pattern.compile(reg);

让正则对象和要作用的字符串相关联。获取匹配器对象。

Matcher m = p.matcher(str);

boolean b = m.find();//将规则作用到字符串上,并进行符合规则的子串查找。
System.out.println(b);
System.out.println(m.group());//用于获取匹配后结果。

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: