【java学习笔记】-- 网络编程

一、网络相关概念

1.1、IP地址

1.1.1、概念

IP地址(Internet Protocol Address)是指互联网协议地址,又称网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。因此,IP地址是逻辑地址,每台主机的网卡上的MAC地址才是物理地址。

1.1.2、组成

32位。由4个8位二进制组成
在这里插入图片描述
8位二进制数的范围是0~255
IP地址 = 网络地址 + 主机地址

  • 网络地址:标识计算机或网络设备所在的网段
  • 主机地址:标识特定主机或网络设备
    在这里插入图片描述
0.0.0.0:本机
127.0.0.1:本机回环地址,用于本机测试
255.255.255.255:当前子网,一般用于向当前子网广播信息

1.1.3、配置和检测

win系统查看本机的IP地址

ipconfig

测试网络是否通畅

ping 目标ip地址

1.2、网络通信协议

DNS:Domain Name System,域名系统

为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合
在这里插入图片描述

二、基于TCP协议的Socket编程

2.1、Socket简介

借鉴的文章
网络通讯的方式有TCP和UDP两种,其中TCP方式的网络通讯是指在通讯的过程中保持连接,有点类似于打电话,只需要拨打一次号码(建立一次网络连接),就可以多次通话(多次传输数据).

在Java语言中,对于TCP方式的网络编程提供了良好的支持,在实际实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。在进行网络编程时,底层网络通讯的细节已经实现了比较高的封装,所以在实际编程时,只需要指定IP地址和端口号码就可以建立连接。正是由于这种高度的封装,一方面简化了Java语言网络编程的难度,另外也使得使用Java语言进行网络编程时无法深入到网络的底层,所以使用Java语言进行网络底层系统编程很困难,具体点说,Java语言无法实现底层的网络嗅探以及获得IP包结构等信息。但是由于Java语言的网络编程比较简单,所以还是获得了广泛的使用。
在这里插入图片描述

  • 通信链路的端点就被称为“套接字”(英文名Socket)
  • 是提供给应用程序的接口

2.2、java.net包

使用Socket需要导入java.net包

  • Socket
  • ServerSocket
  • DatagramPacket
  • DatagramSocket
  • InetAddress
  • ……

2.3、基于TCP协议的Socket网络编程

基于TCP协议的Socket网络编程用来实现双向安全连接网络通信

2.3.1、Socket通信模型

  • 进行网络通信时,Socket需要借助数据流来完成数据的传递工作
    在这里插入图片描述

2.3.2、Socket网络编程步骤

在这里插入图片描述
网络编程模型:客户端/服务器(C/S)

代码示例

public class Server {

	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(10086);
		Socket soc = ss.accept();
		InputStream is = soc.getInputStream();
		BufferedReader br = new BufferedReader(new InputStreamReader(is));

		String str;
		while ((str = br.readLine()) != null) {
			System.out.println("这里是服务器端,接收到的客户端信息为:" + str);
		}

	}

}
-----------------------------------------------------------------------------------------

public class Client {

	public static void main(String[] args) throws IOException {

		// 创建客户端端点
		Socket socket = new Socket("localhost", 10086);

		// 获取输出流将登录信息发送给服务器端
		OutputStream os = socket.getOutputStream();
		
		String str = "用户名和密码";
		byte[] bytes = str.getBytes();
		os.write(bytes);
		
		System.out.println("向服务器发送请求成功");
		
		//关闭输出流
		socket.shutdownOutput();
		
	}
}


三、基于UDP协议的Socket编程

3.1、TCP和UDP对比

TCPUDP
是否连接面向连接面向非连接
传输可靠性可靠不可靠
速度

3.2、步骤

  1. 利用 DatagramPacket 封装数据包
  2. 利用 DatagramSocket 发送数据包
  3. 利用 DatagramSocket 接收数据包
  4. 利用 DatagramPacket 处理数据包
    代码示例
public class Send {

	public static void main(String[] args) {

		DatagramSocket ds = null;
		InetAddress ia = null;
		String mess = "你好,我想咨询一个问题";
		try {
			ia = InetAddress.getByName("localhost");
			DatagramPacket dp = new DatagramPacket(mess.getBytes(), mess.getBytes().length, ia, 8800);
			//创建DatagramSocket对象,向服务器发送数据
			ds = new DatagramSocket();
			ds.send(dp);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			ds.close();
		}
		
	}

}
---------------------------------------------------------------------

public class Receive {

	public static void main(String[] args) {

		DatagramSocket ds = null;

		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, 1024);
		
		try {
			ds = new DatagramSocket(8800);
			ds.receive(dp);
			//显示接收到的信息
			String mess = new String(dp.getData(), 0, dp.getLength());
			System.out.println(dp.getAddress().getHostAddress()+"说:"+mess);
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			ds.close();
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!很高兴回答你关于Java并发编程的问题。请问你想知道什么方面的内容呢?我可以分享一些学习笔记和建议给你。 1. 并发编程基础:了解并发编程的基本概念,如线程、进程、锁、同步等。学习Java中的并发编程模型以及相关的API,如Thread、Runnable、Lock、Condition等。 2. 线程安全性:学习如何保证多线程环境下的数据安全性,了解共享资源的问题以及如何使用同步机制来防止数据竞争和并发问题。 3. 线程间的通信:掌握线程间的通信方式,如使用wait/notify机制、Lock/Condition等来实现线程的协调与通信。 4. 并发容器:学习并发容器的使用,如ConcurrentHashMap、ConcurrentLinkedQueue等。了解它们的实现原理以及在多线程环境下的性能特点。 5. 并发工具类:熟悉Java提供的并发工具类,如CountDownLatch、CyclicBarrier、Semaphore等,它们可以帮助你更方便地实现线程间的协作。 6. 并发编程模式:学习一些常见的并发编程模式,如生产者-消费者模式、读者-写者模式、线程池模式等。了解这些模式的应用场景和实现方式。 7. 性能优化与调试:学习如何分析和调试多线程程序的性能问题,了解一些性能优化的技巧和工具,如使用线程池、减少锁竞争、避免死锁等。 这些只是一些基本的学习笔记和建议,Java并发编程是一个庞大而复杂的领域,需要不断的实践和深入学习才能掌握。希望对你有所帮助!如果你有更具体的问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值