网络编程

一、网络编程

1.1 网络编程概述

  • 计算机网络:为实现资源共享和信息传递,通过通信线路连接起来若干主机,称为计算机网络
  • 网络编程:让计算机与计算机之间建立连接,进行通信
  • 网络编程三要素:
    * IP:计算机在网络中的唯一标识
    * 端口:应用程序在网络中的唯一标识
    * 协议:网络间通信的规则(TCP/UDP)

1.2 网络模型

  • OSI七层模型
    * 应用层:负责文件访问和管理,可靠运输服务,远程操作服务(HTTP,FTP,SMTP)
    * 表示层:负责定义转换数据格式及加密,允许选择以二进制或ASCII格式传输
    * 会话层:负责应用建立和维持会话,使通信在失效时继续恢复通信(断点续传)
    * 传输层:负责是否选择差错恢复协议,数据流重用,错误顺序重排(TCP,UDP)
    * 网络层:负责定义能够标识所有网络节点的逻辑地址(IP地址)
    * 数据链路层:通过规程或协议(差错控制)来控制传输数据的正确性(MAC)
    * 物理层:为设备之间的数据通信提供传输信号和物理介质(双绞线,光导纤维)
    在这里插入图片描述
  • TCP/IP模型
    * 一组用于实现网络互联的通信协议,将协议分为四个层次
    * 应用层:负责传送各种最终形态的数据,是直接与用户打交道的层
    * 传输层:负责传送文本数据
    * 网络层:负责分配地址和传送二进制数据
    * 网络接口层:负责建立电路连接,是整个网络的物理基础

1.3 TCP/UDP

  • TCP协议:是一种面向连接的,可靠的,基于字节流的传输层通信协议。数据大小无限制,建立连接需要三次握手,断开连接需要四次挥手
  • UDP协议:是一种无连接的,提供面向事务的简单不可靠信息传送服务,每个包的大小是64KB

1.4 InetAddress

  • 表示互联网协议(IP)地址对象,封装了与该IP地址相关的所有信息,并提供获取信息的常用方法
  • 常用方法:
    * getLocalHost();获得本地主机地址对象
    * getByName(String host);根据主机名获得地址对象
    * getAllByName(String host);获得所有相关地址对象
    * getHostAddress();获取IP地址字符串
    * getHostName();获得IP地址主机名

1.5 Socket编程

  • 开发步骤:
    * 建立通信连接(会话):
    * 创建ServerSocket,指定端口号
    * 调用accpet等待客户端接入
    * 客户端请求服务器:
    * 创建Socket,指定服务器IP+端口号
    * 使用输出流,发送请求数据给服务器
    * 使用输入流,接受响应数据到客户端(等待)
    * 服务器响应客户端:
    * 使用输入流,接收响应数据到服务器(等待)
    * 使用输出流,发送响应数据给客户端
public class TcpServer {
	//服务端
	public static void main(String[] args) throws IOException {

		// 创建服务器对象,并设置端口号
		ServerSocket ss = new ServerSocket(12345);
		// 获取socket对象
		Socket socket = ss.accept();

		System.out.println("服务器连接成功!");

		// 用输入流接受消息
		InputStream is = socket.getInputStream();
		byte[] b = new byte[1024];
		int len = is.read(b);
		String str = new String(b, 0, len);
		System.out.println(str);

		// 回应消息
		OutputStream os = socket.getOutputStream();
		os.write("给客户端的回应...".getBytes());

		// 统一关闭资源
		IOUtils.closeAll(is, os, socket, ss);
	}
}
public class TcpClient {
	//客户端
	public static void main(String[] args) throws UnknownHostException, IOException {

		// 创建socket对象
		Socket socket = new Socket("127.0.0.1", 12345);

		System.out.println("客户端连接成功!");

		// 用输出流发送消息
		OutputStream os = socket.getOutputStream();
		os.write("客户端发来的消息...".getBytes());

		// 接受回应
		InputStream is = socket.getInputStream();
		byte[] b = new byte[1024];
		int len = is.read(b);
		System.out.println(new String(b, 0, len));

		// 关闭资源
		IOUtils.closeAll(os, is, socket);
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值