java基础之网络编程(学习笔记)

01网络编程的概述
在这里插入图片描述

02网络通信中的三要素
直接见图
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
示例
在这里插入图片描述

03InetAddress的概述和测试
直接上代码

/*
 * 		InetAddress类  :是用来表示互联网协议(IP)地址
 */
public class InetAddressDemo {
	public static void main(String[] args) throws UnknownHostException {
		
//		static InetAddress getByName(String host) : 在给定主机名的情况下确定主机的 IP 地址。
		 
		InetAddress ia = InetAddress.getByName("LAPTOP-6OGPH9CE");//192.168.43.188
		
		System.out.println(ia);
		
		InetAddress ia2 = InetAddress.getByName("192.168.43.188");
		System.out.println(ia2);
		
//		 String getHostName() 
//         获取此 IP 地址的主机名。 
		String hostName = ia2.getHostName();
		System.out.println(hostName);
	
	}
}

运行结果
在这里插入图片描述

04UDP协议发送数据
发送的步骤
在这里插入图片描述

Socket构造方法的区别
在这里插入图片描述

创建数据并打包的步骤 的具体实现
在这里插入图片描述

后面的实现

在这里插入图片描述

完整代码

//创建发送端Socket对象
		DatagramSocket ds = new DatagramSocket();
		//创建数据并打包
		    /*
		     * 		数据byte[]
		     * 		IP地址
		     * 		程序的地址   端口
		     * 
		     * DatagramPacket  是用来表示数据包
		     * 		
		     */
		//数据
		String s = "hello world";
		byte[] bys = s.getBytes();
		int len = bys.length;
		InetAddress address = InetAddress.getByName("LAPTOP-6OGPH9CE");
		int port = 6666;
		//打包
		DatagramPacket dp = new DatagramPacket(bys,len,address,6666);
		//发送数据
		ds.send(dp);
	
		//释放资源
		ds.close();

此时运行不会报错,也不会有结果

05UDP协议接收数据

大致步骤
在这里插入图片描述

构造的差别
在这里插入图片描述

步骤代码
在这里插入图片描述
结果
在这里插入图片描述

解析数据步骤可用的方法
在这里插入图片描述
完整代码

//创建接收端Socket对象
		DatagramSocket ds = new DatagramSocket(6666);
		//接收数据
		byte[] bys = new byte[1024];
		DatagramPacket dp = new DatagramPacket(bys, bys.length);
		ds.receive(dp);
		//解析数据
		InetAddress address = dp.getAddress();
		//输出数据
		System.out.println("sender---->"+address.getHostAddress());
		System.out.println(new String(bys));
		//释放资源
		ds.close();

运行结果
在这里插入图片描述

注意:要先运行接受的代码,再运行发送的代码 才会收到数据

创建接收端Socket对象时,一定要指定发送时的同一端口

06UDP协议收发数据注意事项
在这里插入图片描述
连着运行两次服务端就会报错:端口已经绑定
在这里插入图片描述

07TCP协议发送数据
大致步骤
在这里插入图片描述
在这里插入图片描述

我的代码

	Socket s = new Socket(InetAddress.getByName("LAPTOP-6OGPH9CE"),2333);
		OutputStream os = s.getOutputStream();
		String str = "dlkahsjdas";
		os.write(str.getBytes());
//		os.close();   //Socket对象会帮你关闭,不用再关输出

注意:tcp协议是要创建连接的,只有客户端就运行的话 就会报错
在这里插入图片描述

08TCP协议接收数据

大致步骤
在这里插入图片描述
具体
在这里插入图片描述

tcp协议中在没有像DatagramPacket类的情况下,获取数据的方法:
利用Socket对象.方法
在这里插入图片描述
在这里插入图片描述

我的代码

//创建接收端Socket对象
		DatagramSocket ds = new DatagramSocket(6666);
		//接收数据
		byte[] bys = new byte[1024];
		DatagramPacket dp = new DatagramPacket(bys, bys.length);
		ds.receive(dp);
		//解析数据
		InetAddress address = dp.getAddress();
		//输出数据
		System.out.println("sender---->"+address.getHostAddress());
		System.out.println(new String(bys));
		//释放资源
		ds.close();

运行结果
在这里插入图片描述

10模拟用户登陆
大致步骤
在这里插入图片描述

客户端
在这里插入图片描述
在这里插入图片描述
先到这一步,然后转到服务端去
在这里插入图片描述
在这里插入图片描述

再回到客户端写完整
在这里插入图片描述

我的代码
客户端的

Socket s =new Socket("LAPTOP-6OGPH9CE",2999);
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("请输入用户名:");
		String username = br.readLine();
		System.out.println("请输入密码:");
		String password = br.readLine();
		
		PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
		
		pw.write(username);
		pw.write(password);
		
		
		//获取输入流对象
		BufferedReader sbr = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String result = sbr.readLine();
		System.out.println(result);
		
		
		s.close();

服务端的

ServerSocket ss = new ServerSocket(2999);
		Socket s =ss.accept();
		BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String un = br.readLine();
		String pw = br.readLine();
		boolean flag = false;
		if("杨帅".equals(un)&&"sh123567".equals(pw)) {
			flag =  true;
		}
		
		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		
		if(flag) {
			out.println("登录成功");
		}
		else {
			out.println("登录失败");
		}
		
		s.close();
//		ss.close();  //服务器一般不关闭

11模拟用户登录案例改写
按死了比用户名和密码不可取…

改写第一步:写个用户类
在这里插入图片描述
再把构造方法,set和get方法都生成出来

接着写个数据库类,装用户的信息
在这里插入图片描述

正码里改的地方
在这里插入图片描述
运行
在这里插入图片描述

失败了 为什么呢?

原因
比较的那个方法 contains方法的源码是equals方法比较,但是我们又没有改写equals
所以需要在用户类里改写equals

在这里插入图片描述
运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值