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来做
相关文章推荐
- 使用Java VisualVM监控远程JVM
- 《THINKING IN JAVA》随笔
- Java编程思想学习(三) 初始化与清理
- Eclipse工作常用技巧总结
- Spring源码解析 - BeanFactory接口体系解读
- JAVA中的命令模式实例教程
- Java设计模式学习总结
- java.lang.UnsatisfiedLinkError: Can not load XXX library ... JNA不能加载DLL动态库问题
- java 静态代理 JDK动态代理 Cglib动态代理
- Java编程思想学习(二) 操作符
- JAVA高级程序设计学习计划
- eclipse快捷键大全
- java NIO原理及通信模型
- Java编程思想学习(一) 一切都是对象
- java笔记1→认识java与配置环境变量
- java 正则表达式
- myeclipse内存配置
- java设计模式——代理模式
- 关于10元钱能喝多少瓶酒的问题
- 解决JAVA调用mysqldump备份数据库时文件为空的问题