网络编程

本文介绍了计算机网络的基本概念,包括互联网、万维网和物联网,并详细阐述了OSI七层模型和TCP/IP四层模型。重点讲解了InetAddress类在网络编程中的作用,以及如何使用它获取IP地址和主机名。此外,还展示了基于TCP的Socket编程实例,包括文本数据传输和文件上传。
摘要由CSDN通过智能技术生成

计算机网络

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

常见计算机网络

  • 互联网:(Internet)点与点相连,指的是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连
  • 万维网:(WWW – World Wide Web)端与端相连,万维网是World Wide Web的简称,也称为Web、3W等。WWW是基于客户器端/服务器端方式的信息发现技术和超文本技术的综合
  • 物联网:( IoT - Internet of things) 物与物相连,物联网(Internet of Things,简称IOT)是指通过 各种信息传感器等各种装置与技术得到各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接
  • 网络编程:让计算机与计算机之间建立连接、进行通信,从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用

网络编程

OSI参考模型

OSI是一个开放性的通信系统互连参考模型,是一个协议规范。

网络七层协议

  • 7 应用层
  • 6 表示层
  • 5 会话层
  • 4 传输层
  • 3 网络层
  • 2 数据链路层
  • 1 物理层

每层功能:

  • 应用层:应用层负责文件访问和管理、可靠运输服务、远程操作服务。(HTTP、FTP、SMTP)。
  • 表示层:表示层负责定义转换数据格式及加密,允许选择以二进制或ASCII格式传输。
  • 会话层 :会话层负责使应用建立和维持会话,使通信在失效时继续恢复通信。(断点续传)。
  • 传输层:传输层负责是否选择差错恢复协议、数据流重用、错误顺序重排。(TCP、UDP)。
  • 网络层 :网络层负责定义了能够标识所有网络节点的逻辑地址。(IP地址)。
  • 数据链路层:链路层在物理层上,通过规程或协议(差错控制)来控制传输数据的正确性。(MAC)。
  • 物理层:物理层为设备之间的数据通信提供传输信号和物理介质。(双绞线、光导纤维)。
    7、6、5、4层定义了应用程序的功能
    3、2、1层主要面向通过网络的端到端,点到点的数据流

TCP/IP模型

TCP/IP是指能够在多个不同网络间实现信息传输的协议,是因特网使用的参考模型,基于TCP/IP的参考模型将协议分成四个层次,该模型中最重要的两个协议是TCP和IP协议

四层协议

  • 4.应用层
  • 3.传输层
  • 2.网络层
  • 1.网络接入层

每层功能:

  • 应用层:应用层负责传送各种最终形态的数据,是直接与用户进行交互的层,典型协议是HTTP、FTP等。
  • 传输层:传输层负责传送文本数据,主要协议是TCP、UDP协议。
  • 网络层:网络层负责分配地址和传送二进制数据,主要协议是IP协议。
  • 网络接入层:接口层负责建立电路连接,是整个网络的物理基础,典型的协议包括以太网、ADSL等等。

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地址主机名

//1.1getLocalhost()方法
InetAddress ia1=InetAddress.getLocalHost();
System.out.println("ip地址:"+ia1.getHostAddress()+" 主机名:"+ia1.getHostName());

//1.2getByName("ip地址");
InetAddress ia2=InetAddress.getByName("192.168.0.103");
System.out.println("ip地址:"+ia2.getHostAddress()+" 主机名:"+ia2.getHostName());

//1.4getByName("localhost");
InetAddress ia4=InetAddress.getByName("localhost");
System.out.println("ip地址:"+ia4.getHostAddress()+" 主机名:"+ia4.getHostName());

基于TCP的网络编程

Socket编程:

  • Socket(套接字)是网络中的一个通信节点。
  • 分为客户端Socket与服务器ServerSocket。
  • 通信要求:IP地址 + 端口号。

TCP编程实现客户端发送数据给服务器端

服务器端

public static void main(String[] args) throws Exception{
		//1 创建ServerSocket 并指定端口号
		ServerSocket listener=new ServerSocket(9999);
		//2 调用accept(),接收客户端请求,阻塞方法(如果没有客户端请求,则阻塞)
		Socket socket=listener.accept();
		//3 获取输入流,读取客户端发送的数据
		InputStream is=socket.getInputStream();
		BufferedReader br=new BufferedReader(new InputStreamReader(is,"utf-8"));
		String data=br.readLine();
		System.out.println("客户发送:"+data);
		//4 关闭释放资源
		br.close();
		socket.close();
		listener.close();
	}

客户端

public static void main(String[] args) throws Exception{
		//1 创建客户端套接字,并指定服务器的地址和端口号
		Socket socket=new Socket("192.168.0.1", 9999);
		//2 获取输出流,发送数据给服务器
		OutputStream os=socket.getOutputStream();
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os,"utf-8"));
		bw.write("好久不见");
		//3 关闭释放资源
		bw.close();
		socket.close();
	}

TCP编程实现客户端上传文件给服务器端

服务器端

public static void main(String[] args) throws Exception {
		//1创建ServerSocket
		ServerSocket listener=new ServerSocket(9999);
		//2侦听,接收客户端请求
		Socket socket=listener.accept();
		//3获取输入流
		InputStream is=socket.getInputStream();
		//4边读取,边保存
		FileOutputStream fos=new FileOutputStream("d:\\002.jpg");
		byte[] buf=new byte[1024*4];
		int count=0;
		while((count=is.read(buf))!=-1) {
			fos.write(buf,0,count);
		}
		//5关闭
		fos.close();
		is.close();
		socket.close();
		listener.close();
		System.out.println("接收完毕");
	}

客户端

public static void main(String[] args) throws Exception {
		//1创建Socket
		Socket socket=new Socket("192.168.0.103", 9999);
		//2获取输出流
		OutputStream os=socket.getOutputStream();
		//3边读取文件,边发送
		FileInputStream fis=new FileInputStream("d:\\001.jpg");
		byte[] buf=new byte[1024*4];
		int count=0;
		while((count=fis.read(buf))!=-1) {
			os.write(buf,0,count);
		}
		//4关闭
		fis.close();
		os.close();
		socket.close();
		System.out.println("发送完毕");
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值