千峰JAVA逆战班Day32

Day32

*计算机网络:为实现资源共享和信息的传递,通过信息线路连接起来的若干主机(Host)

​ 互联网:点与点相连

​ 万维网:端与端相连

​ 物联网:物与物相连

​ 网络编程:让计算机与计算机之间建立连接、进行通信

*TCP/IP模型:

​ 一:网络接口层,负责建立电脑与电脑直接物理设备的连接(例如,网线,路由器,网卡等)

​ 二:网络层,物理连接实现之后,需要对每台电脑进行区分,这就给每台电脑分配了一个IP地址,就像我们的身份证一样

​ 三:传输层:电脑之间的信息交互需要遵从一个协议:TCP/UDP

​ 四:应用层:应用层是直接与用户进行交互的,所以我们封装了一个更加方便,简单易懂的上层协议(类似于加了一个包装类):HTTP SMTP FTP。

用户和服务器之间的时用HTTP协议(本质上也是TCP),计算机与计算机之间使用TCP协议

*TCP/UDP:

​ TCP协议:是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小没有限制。建立连接需要进行三次握手,断开连接需要4次挥手

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qKmD7mWE-1584494126639)(C:\Users\吴一凡\AppData\Roaming\Typora\typora-user-images\image-20200317121618832.png)]

​ UDP协议:是一种没有连接环节的传输层协议,提供面向失误的简单不可靠信息传送服务,每个包的大小为64kb

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vRGDtzbF-1584494126641)(C:\Users\吴一凡\AppData\Roaming\Typora\typora-user-images\image-20200317121807541.png)]

*127.0.0.1 和 localhost 都是指本机。 查看IP命令:ipconfig 测试IP命令:ping D.D.D.D

*端口号:port,在通信实体上进行网络铜须的程序的唯一标识。通俗来说,端口号就是程序在计算机上的身份证。

*InetAddress类:概念,表示ID地址对象,封装了与该IP地址相关的所有信息,并提供了获取信息的常用方法。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class TestInetAddress {

	public static void main(String[] args) {
		try {
			InetAddress ia = InetAddress.getLocalHost();
			System.out.println("主机名"+ia.getHostName());
			System.out.println("主机地址"+ia.getHostAddress());
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		
		try {
			//·获取所有的IP地址
			InetAddress[] ia2 = InetAddress.getAllByName("www.baidu.com");
			for (InetAddress inetAddress : ia2) {
				System.out.println(inetAddress.getHostAddress());
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
	}
}

*Socket编程:Socket是网络中的一个通信节点

​ 分为客户端Socket与服务器端ServerSocket;通信要求:IP+端口号

package com.qianfeng.pm.demo2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author 吴一凡
 *	服务器端
 */
public class DemoServer {

	public static void main(String[] args) {
		int port = 8888;
		try {
			//·主动指定一个端口,那么客户端代码,就可以通过这个端口找到服务端
			ServerSocket serversocker = new ServerSocket(port);
			System.out.println("服务端启动...等待客户端连接...");
			InetAddress ia;
			Socket server;
			OutputStream os;
			while(true) {
				//·开启监听,等待客户的连接
				server = serversocker.accept();//·会变成阻塞状态,等待客户端连接,才会继续执行
				//·通过socket对象获取客户端主机对象
				 ia = server.getInetAddress();
				//·通过socket对象来获取输出流对象
				//·通过输出流给客户端发信息
				os = server.getOutputStream();
				//·用桥接器将字节流转换成字符流
				BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
				//·发送数据给客户端
				bw.write("hello "+ia.getHostAddress()+"\n");//·加上换行使客户端可以通过readline来读取
				//·调用flush刷新缓冲区,并发送消息,这里不能用close关闭流。
				bw.flush();
				
				//·通过输入流 接收客户端发送过来的信息
				InputStream is = server.getInputStream();
				//·用桥接器将字节流转换成字符流
				BufferedReader br = new BufferedReader(new InputStreamReader(is));
				//·读取一行信息,必须以换行作为结尾的信息才能读到
				String msg = br.readLine();
				System.out.println("客户端发送给我的信息:"+msg);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

package com.qianfeng.pm.demo2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * @author 吴一凡
 *	客户端
 */
public class DemoClient {

	public static void main(String[] args) {
		//·和服务器进行连接,必须要知道服务器端的ip地址和端口号
		String ip = "127.0.0.1";
		int port = 8888;
		Socket client;
		try {
			client = new Socket(ip,port);
			System.out.println("与服务端连接成功");
			//·通过输入流 接收服务端发送过来的信息
			InputStream is = client.getInputStream();
			//·用桥接器将字节流转换成字符流
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			//·读取一行信息,必须以换行作为结尾的信息才能读到
			String msg = br.readLine();
			System.out.println("服务端发送给我的信息:"+msg);
			
			//·给服务器发送消息
			OutputStream os = client.getOutputStream();
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
			bw.write("你好我是一个客户端\n");
			bw.flush();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

bw.write("你好我是一个客户端\n");
			bw.flush();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值