网络编程 OSI TCP/IP模型 基于TCP的网络编程

网络编程:

网络模型: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();
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值