黑马程序员——Java中网络编程笔记
来源:互联网 发布:tizen 有哪些软件 编辑:程序博客网 时间:2024/05/09 01:52
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
网络编程
网络参考模型:
OSI参考模型 TCP/IP参考模型
|-- 应用层 |
|-- 表示层 |-- 应用层
|-- 会话层 |
|-- 传输层 |-- 传输层
|-- 网络层 |-- 网际层
|-- 数据链路层 |
|-- 物理层 |-- 主机至网络层
网络传输要素
IP地址:用来唯一标识网络中的一台计算机。不易记忆,可用主机名
关于IP地址最后一位
0是网段地址
255是广播地址
有效IP是1-254
端口号:用于标识网络通信时同一台主机上的不同进程。
范围:0~65535,其中1~1024为系统保留端口号。
传输协议:TCP和UDP
UDP:
1)将数据及源和目的封装成数据报中,不需要建立连接
2)每个数据报的大小在限制在64k内
3)因无连接,是不可靠协议
4)不需要建立连接,速度快
TCP:
1)建立连接,形成传输数据的通道。
2)在连接中进行大数据量传输
3)通过三次握手完成连接,是可靠协议
4)必须建立连接,效率会稍低
Java的网络编程
java.net包
IP地址对用的操作类InetAddress
常用方法
//构造方法
static getLocalHost() 获取本机IP对象
static getByName(String add) 获取指定计算机名的计算机IP地址
//其他方法
getHostAddress() 获取IP地址
getHostName() 获取主机名
Socket:就是为网络服务提供的一种机制
- 通信双方都有Socket
- 网络通信就是Socket通信
- 数据在两个Socket间通过IO传输
UDP:发送端与接收端
java.net.DatagramPacket
建立udp传输的相关要素:
1)DatagramSocket(封装了udp传输协议的socket对象。)与DatagramPacket(数据报对象)
2)建立发送端,接收端。
3)建立数据包,数据包中包括目的地址、端口、数据等信息。
4)调用Socket的发送接收方法。
5)关闭Socket。
1)UDP发送端
实现思路:
1. 建立UDP的socket服务
2. 将要发送的数据封装到数据包中
3. 通过UDP的socket服务将数据包发送出去
4. 关闭socket服务
示例:
//使用DatagramSocket对象创建对象DatagramSocket ds = new DatagramSocket();//将要发送的数据封装到数据包中String str = "要发送的数据";//将数据封装到DatagramPacket对象byte[] buf = str.getBytes();DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 10000);//通过socket服务将数据包发送出ds.send(dp);//关闭资源ds.close();
2)UDP接收端
实现思路:
1. 建立UDP的socket服务, 指定端口号
2.创建数据包, 用于存储接收的数据
3.使用socket服务的receive方法将接收的数据存储到数据包中
4. 通过数据包的方法解析数据
5. 关闭资源
示例:
//建立UDP socket服务DatagramSocket ds = new DatagramSocket(10000);//创建数据包byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, buf.length);//使用接收方法将数据存储到数据包ds.receive(dp);//通过数据包对象方法, 解析数据String ip = dp.getAddress().getHostAddress();int port = dp.getPort();String text = new String(dp.getData(), 0, dp.getLength());System.out.println(ip + "..." + port + "..." + text);//关闭资源ds.close();
发送端与接收端是两个独立的运行程序。
TCP
分为两部分
- 客户端:
- 服务端:
1)客户端Socket
实现思路:
1. 建立TCP客户端的socket对象, 指定端口号2. 如果连接建立成功, 说明数据传输通道已建立. 可以通过getOutPutStream和getInputStream获取输出和输入字节流数据
3. 使用输出流, 将数据写出
4. 关闭资源
示例:
//创建客户端socketSocket socket = new Socket("192.168.25.100", 10000);//获取socket流中的输出流OutputStream out = socket.getOutputStream();//使用输出流将指定的数据写出out.write("哈喽".getBytes());//关闭资源socket.close();
2)服务端ServerSocket
实现思路:
1.创建服务端socket服务, ServerSocket
2. 服务端对外提供端口进行监听
3. 获取连接过来的客户端对象
4. 通过客户端对象获取socket流, 读取客户端数据
5. 关闭资源(关客户端防止占用资源, 关服务端)
示例:
//创建服务端对象ServerSocket ss = new ServerSocket(10000);//获取连接的客户端对象Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();//通过socket对象获取输入流读取数据InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String text = new String(buf, 0, len);Syste,.out.println(ip+" : "+text);//关闭资源s.close();ss.close();
Tcp传输最容易出现的问题
客户端连接上服务端,两端都在等待,没有任何数据传输。
通过例程分析:
因为read方法或者readLine方法是阻塞式。
解决办法:
自定义结束标记
使用shutdownInput,shutdownOutput方法。
- 黑马程序员——Java中网络编程笔记
- 黑马程序员——学习笔记10.Java网络编程
- 黑马程序员 java学习笔记——网络编程
- 黑马程序员——JAVA笔记之网络编程
- 黑马程序员——java学习笔记--网络编程
- 黑马程序员java学习笔记——网络编程
- 黑马程序员——Java网络编程-整理笔记
- 黑马程序员Java笔记——网络编程
- 【黑马程序员】网络编程——Java复习笔记
- 黑马程序员——Java中网络编程
- 黑马程序员—网络编程笔记
- 黑马程序员——Java网络编程
- 黑马程序员——java网络编程
- 黑马程序员——java网络编程
- 黑马程序员——JAVA 网络编程
- 黑马程序员——Java网络编程
- 黑马程序员——Java网络编程
- 黑马程序员——Java/网络编程
- Git 学习总结
- 【学习拾遗】Jquery(四)--自写插件
- django模板的{%%}标记与js模板冲突
- 基于Spark机器学习和实时流计算的智能推荐系统
- SpringMVC获取POST参数值时中文乱码
- 黑马程序员——Java中网络编程笔记
- java抓取糗事百科内容
- 使用jQuery对Ajax的封装 (主要是更安全,更方便)
- 如何产生javacore和heapdump文件
- Python数据结构之序列
- Error generating final archive: Debug Certificate expired on 问题
- 【Leetcode】Rectangular Area
- C++ + QT,显示cc1plus.exe:-1: error: out of memory allocating 134221823 bytes
- BZOJ1854 [Scoi2010]游戏(并查集/二分图匹配)