1.网络参考模型:
(1)OSI(开放系统互联)参考模型:
应用层:终端应用
表示层:比计算机识别的东西转换成人能识别的东西(解释,加密,解密)
会话层:在系统之间发起会话或接受会话请求。即:通过传输层建立数据连接通路
传输层:定义传输数据的协议和端口号
网络层:将从下层收到的数据进行IP地址的封装与解封装
数据链路层:将从下层收到的数据进行Mac地址的封装与解封装
物理层:定义物理设备标准
(2)TCP/IP参考模型:
应用层:
传输层:
网络层:
主机至网络层:
2.网络通讯的要素:
(1)IP地址:网络中设备的标识,本地回环地址:127.0.0.1。
(2)端口号:用于标志晋城的逻辑地址,不同进程间的标志。有效的端口号:0~65535。其中0~1024系统使用或保留端口。
(3)传输协议:通讯的规则。常见的协议:TCP,UDP。
3.传输协议:
(1)UDP:
将数据及源和目的封装到数据包中,不需要建立连接
每个数据包的大小限制在64K以内
因为无连接,所以是不可靠的协议
不需要建立连接,速度快。
(2)TCP:
建立连接,形成传输数据的通道
在连接中进行大数据量的传输
通过三次握手完成连接,是可靠的协议
必须建立连接,效率略低
4.Socket:
Socket就是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
(2).接收端:UDPReceive.java
(1)OSI(开放系统互联)参考模型:
应用层:终端应用
表示层:比计算机识别的东西转换成人能识别的东西(解释,加密,解密)
会话层:在系统之间发起会话或接受会话请求。即:通过传输层建立数据连接通路
传输层:定义传输数据的协议和端口号
网络层:将从下层收到的数据进行IP地址的封装与解封装
数据链路层:将从下层收到的数据进行Mac地址的封装与解封装
物理层:定义物理设备标准
(2)TCP/IP参考模型:
应用层:
传输层:
网络层:
主机至网络层:
2.网络通讯的要素:
(1)IP地址:网络中设备的标识,本地回环地址:127.0.0.1。
(2)端口号:用于标志晋城的逻辑地址,不同进程间的标志。有效的端口号:0~65535。其中0~1024系统使用或保留端口。
(3)传输协议:通讯的规则。常见的协议:TCP,UDP。
3.传输协议:
(1)UDP:
将数据及源和目的封装到数据包中,不需要建立连接
每个数据包的大小限制在64K以内
因为无连接,所以是不可靠的协议
不需要建立连接,速度快。
(2)TCP:
建立连接,形成传输数据的通道
在连接中进行大数据量的传输
通过三次握手完成连接,是可靠的协议
必须建立连接,效率略低
4.Socket:
Socket就是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。
实例代码:
1.获取IP及域名:
import java.net.*;
public class IPDemo
{
public static void main(String[] args) throws Exception
{
InetAddress ia = InetAddress.getLocalHost(); //1
System.out.println(ia.getHostAddress());
System.out.println(ia.getHostName());
ia = InetAddress.getByName("www.baidu.com"); //2
System.out.println(ia.getHostAddress());
System.out.println(ia.getHostName());
}
}
/*
结果:
---------- java ----------
192.168.42.13
GaoleiFu-PC
61.135.169.125
www.baidu.com
Output completed (0 sec consumed) - Normal Termination
*/
2.简单的聊天程序:
(1)发送端:UDPSend.java
import java.net.*;
import java.io.*;
public class UDPSend
{
public static void main(String[] args) throws Exception
{
System.out.println("发送端运行了");
DatagramSocket ds = new DatagramSocket();
BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = buff.readLine())!= null){
byte[] buf = line.getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.45.1"),10000);
ds.send(dp);
if("over".equals(line)){
System.out.println(InetAddress.getLocalHost().getHostAddress()+"离开聊天室");
break;
}
}
ds.close();
}
}
/*
结果:
---------- java ----------
发送端运行了
Output completed (0 sec consumed) - Normal Termination
*/
(2).接收端:UDPReceive.java
import java.net.*;
public class UDPReceive
{
public static void main(String[] args) throws Exception
{
System.out.println("接收端运行了");
DatagramSocket ds = new DatagramSocket(10000);
byte[]buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
while(true){
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);
if(text.equals("over"))break;
}
ds.close();
}
}
/*
结果:
---------- java ----------
<span style="white-space:pre"> </span>接收端运行了
<span style="white-space:pre"> </span>192.168.45.1:49522:haha
<span style="white-space:pre"> </span>192.168.45.1:49522:我是客户端!
<span style="white-space:pre"> </span>192.168.45.1:49522:结束吧!
<span style="white-space:pre"> </span>192.168.45.1:49522:over
<span style="white-space:pre"> </span>Output completed (1 min 35 sec consumed) - Normal Termination
*/