------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();
//建立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();
//创建客户端socket
Socket socket = new Socket("192.168.25.100", 10000);
//获取socket流中的输出流
OutputStream out = socket.getOutputStream();
//使用输出流将指定的数据写出
out.write("哈喽".getBytes());
//关闭资源
socket.close();
//创建服务端对象
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();