您的位置:首页 > 编程语言 > Java开发

Java Socket通信小结

2016-03-10 18:12 393 查看

Java中的网络支持

InerAddress

用于标识网络上的硬件资源。标识互联想协议(IP)地址。

无构造方法,只能通过getXXX方法得到(static InetAddress)

测试代码

InetAddress address = InetAddress.getLocalHost();
System.out.println("计算机名"+address.getHostName());
System.out.println("IP address"+address.getHostAddress());
byte[] bytes = address.getAddress();//字节数组形式的IP
System.out.println("字节形式数组的形式"+Arrays.toString(bytes));
System.out.println("---输出InetAddress实例----");
System.out.println(address);//直接输出address对象
/*根据机器名获取InetAddress实例*/
InetAddress address2 = InetAddress.getByName("Jian-PC");
/*根据IP获取InetAddress实例*/
InetAddress address3 = InetAddress.getByName("169.254.76.89");


输出结果

计算机名Jian-PC
IP address169.254.76.89
字节形式数组的形式[-87, -2, 76, 89]
---输出InetAddress实例----
Jian-PC/169.254.76.89


URL

统一资源定位符,通过URL可以直接读取或写入网络上的数据。

由两部分组成 协议名资源名

常用方法

String immoc = new URL("http://www.imooc.com");
/*根据父URL指定子URL,?后面为参数,#后面为锚点*/
URL url = new URL(immoc, "/index.html?username=tom#test");
System.out.println("协议:"+url.getProtocol());
System.out.println("主机:"+url.getHost());
/*如果未指定端口号,则使用默认端口号,此时getPort()返回值为-1*/
System.out.println("端口号:"+url.getPort());
System.out.println("文件路径:"+url.getPath());
System.out.println("文件名:"+url.getFile());
System.out.println("相对路径:"+url.getRef());
System.out.println("c查询字符串:"+url.getQuery());


使用URL读取网页内容

使用URL对象的openStream()方法得到指定资源的输入流

通过输入流可以访问网上的资源

代码如下:

//使用URL读取页面内容
//抓取到百度页面的代码
try {
//创建一个URL实例
URL url = new URL("http://www.baidu.com");
//通过URL的openStreeam()方法获取URL对象所表示的资源的字节输入流
InputStream is = url.openStream();
//将字节输入流转换为字符输入流,指定编码格式
InputStreamReader isr = new InputStreamReader(is,"utf-8");
//为字符输入流添加缓冲
BufferedReader br = new BufferedReader(isr);
String data = br.readLine();//读取数据
while(data!=null){
System.out.println(data);
data = br.readLine();
}
br.close();
isr.close();
is.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO: handle exception
}


这段代码主要显示了http://www.baidu.com首页的源代码,大家可以把它写入一个html,打开网页即可显示百度首页的页面

Sockets

使用TCP协议实现网络通信的Socket相关的类。

TCP协议是面向连接、可靠的、有序的,以字节流的方式发送数据。

基于TCP协议实现网络通信的类有以下两类:

客户端的Socket类

服务器端的ServerSocket类

Socket通模型

Server端

创建ServerSocket对象,绑定监听端口,使用accept()方法监听客户端请求,注意阻塞与非阻塞。

利用inputstream、outputstream开始通信

关闭socket及相关资源

Client端

创建连接socket对象,指明需要连接的服务器的地址和端口号。

利用inputstream、outputstream开始通信

关闭socket及相关资源



Socket通信实现步骤

1. 创建ServerSocket和Socket
2. 打开连接到Socket的输入输出流
3. 按照协议对Socket进行读/写操作
4. 关闭输入输出流、关闭Socket


多线程TCP Socket通信实例

Datagram

使用UDP协议,将数据保存在数据报中,通过网络进行通信,无连接、不可靠、无序

优点是速度快,做传输时,将数据定义成数据包Datagram,在数据包中指定索要达到的Socket(主机号和端口号)

相关类

DatagramPacket 表示数据报包

DatagramSocket 进行端到端通信的类

用法demo

服务器端

创建DatagramSocket,指定端口号

创建DatagramPacket

接收客户端发送的数据信息

读取数据

客户端

定义发送信息

创建DatagramPacket,包含将要发送的信息

创建DatagramSocket,发送数据

发送数据

多线程UDP Socket通信实例

一些注意事项

Socket通信过程中,可以提高开启线程的优先级,提升反应速度。

一般不用关闭输入输出流,直接关闭socket就可以。

在使用TCP传输对象时,可以使用ObjectIn/OutputStram流装饰输入输出流来传输。

socket传输文件可以结合Java FileIO来做
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: