网络编程:
网络模型:OSI( 开放式系统互联 )
第一层 :物理层 , 为设备间的数据通信提供传输信号和物理介质 (双绞线,光导纤维)
第二层 :数据链路层 , 提供介质访问和链路管理。通过规程或协议来控制传输数据的正确性 (MAC)
第三层 :网络层 , ip选址和路由选择 (ip地址)
第四层 :传输层 , 建立,管理和维护端到端的连接 (TCP/UDP)
第五层 :会话层 , 建立,管理和维护会话 (断点续传)
第六层 :表示层 , 数据格式转化,数据加密
第七层 :应用层 , 为应用程序提供服务,负责文件访问和管理,可靠运输服务,远程操作服务 (HTTP FTP SMTP)
TCP/IP模型:
第一层 : 网络接口层 , 负责建立电路连接,整个网络的物理基础 典型协议包括以太网,ADSL等
第二层 : 网络层 , 负责分配地址和传送二进制数据,主要协议是IP协议
第三层 : 传输层 , 负责传送文本数据,主要协议是TCP UDP协议
第四层 : 应用层 , 负责传送各种最终形态的数据,是直接与用户打交道的层,典型协议是HTTP,FTP等
TCP/UDP区别:
TCP协议:传输控制协议
是一种面向连接的,可靠的,基于字节流的传输通信协议,数据大小无限制,建立连接的过程需要三次握手, 断开连接时需要四次挥手
UDP协议: 用户数据报协议
是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,每个包大小是64kb
ip:分配给互联网设备的唯一标识
port:在通信实体上进行网络通讯的程序的唯一标识
InetAddress类:
表示互联网协议(ip)地址对象,封装了与该IP地址相关的所有信息, 并提供获取信息的常用方法
public static InetAddress getLocalHost() 获得本地主机地址对象
public static InetAddress getByName(String host) 根据主机名获得地址对象
public static InetAddress[] getAllByName(String host) 获得所有相关地址对象
public String getHostAddress() 获取IP地址字符串
public String getHostName() 获得IP地址主机名
基于TCP的网络编程:
Socket编程: Socket( 套接字 ) 是网络中的一个通信节点,分为客户端Socket 和服务器ServerSocket ,通信要求:ip地址+端口号
public class TcpServer {
public static void main(String[] args) throws Exception {
ServerSocket listener = new ServerSocket(9999); // 实例化一个端口号为9999的服务器
System.out.println("服务器启动....");
Socket socket = listener.accept(); // 代码到这里不往下运行,服务器等待用户请求,接入客户端
InputStream is = socket.getInputStream();
// 有客户端来访问该服务器,就会实例化一个该服务器的输入流,用来接收客户端的数据
BufferedReader br = new BufferedReader(new InputStreamReader(is,
"utf-8"));
String data = br.readLine();
System.out.println("客户发送:" + data);
br.close();
socket.close();
listener.close();
}
}
public class TcpClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 9999);//
// 客户端与服务器建立连接,可以向服务器发送数据和接收服务器传送过来的数据
//socket.getOutputStream()获得流
OutputStream os = socket.getOutputStream();// 输出流属于客户端和服务器的
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os,
"utf-8"));
bw.write("好久不见");
bw.fliush();
bw.close();
socket.close();
}
}