JavaSE - Day22 (网络编程 Socket)

名词

互联网: 点对点连接

万维网: WWW.

物联网:

ip : 计算机在网络中的地址

端口: 软件在计算机中的地址

协议: 计算机 与 计算机交流的规则

iP

概念:

计算机在互联网中的地址

分类:

IPV4:

取值: 0~ 255 , 0~255 , 0~255 , 0~255

注意: 0 , 1 , 255 有特殊意义,不要使用

IPV6:

查看自己电脑上的ip地址:

利用dos 命令,ipconfig 查看

Java中ip类对应的类InetAddress

getLocalHost(); 获取本机地址

getByName(); 通过指定ip 或 设备名查找计算机地址

getAllByName() ; 获取指定ip 设备名 ,网址对应的所有的地址

getHostAddress() ; 获取调用该方法对象的ip 地址

getHostName() ; 获取调用该方法的对象中的设备名称

特殊地址:

127.0.0.1 属于本机地址

端口

取值: 0~65535

注意:

一般 0~ 2048被系统占用

常用端口: 8080 3306 80 8000

协议

OSI七层模型

应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

TCP

面向有连接

特点:

三次握手 ,四次挥手

三次握手:

封装对方所在地址

判断是否连接成功

沟通

四次挥手:

封装结束

连接完成

沟通结束

断开

编程: 服务器: 创建服务器Socket 等待客户端连接 获取客户端在服务端的映射 通过客户端的映射 获取输入流 与 输出流 ......... 客户端: 创建客户端Socket 连接服务器 获取客户端的输入 或者 输出流 ......

UDP

面向无连接

特点:

每次传输数据的一部分,不会考虑对方是否接收的到

编程: 接收端: 创建一个接收端的Socket 准备一个数据包,用来接收数据 接收数据 获取数据包中的数据 获取数据包中数据的长度 打印输出 关闭资源 发送端: 创建一个发送端的Socket 准备要发送的数据 准备发送的数据包 发送数据 关闭资源

TCP

2,客户端上传一个文件给服务器,服务器回馈收到了 服务器 1,创建服务器Socket 2,等待客户端连接,获取客户端映射 3,获取客户端映射的输入流与输出流 4,使用输入流获取客户端上传的文件 5,创建一个文件输出流,将客户端上传的文件存储到指定位置 6,使用输出流返回收到了 7,冲刷 8,关流 9,关闭socket与服务器socket 客户端 1,创建客户端的Socket 2,获取客户端的输出流与输入流 3,创建一个文件输入流,读取文件 4,使用输出流输出要上传的文件 5,冲刷 6,使用输入流获取服务器返回的信息 7,关流 8,关闭客户端Socket

public class Client {
	public static void main(String[] args) throws IOException {
		Socket socket = new Socket("127.0.0.1", 9889);
		FileInputStream fis = new FileInputStream("D:\桌面\美女.jpg");
		OutputStream outputStream = socket.getOutputStream();
		InputStream inputStream = socket.getInputStream();
		byte[] b = new byte[1024];
		int len = 0;
		while ((len = fis.read(b)) != -1) {
			outputStream.write(b , 0 , len);
			outputStream.flush();
		}
		int read = inputStream.read(b);
		String string = new String(b , 0 , read);
		System.out.println(string);
		outputStream.close();
		inputStream.close();
		socket.close();
	}
}
public class Server {
	public static void main(String[] args) throws IOException {
		ServerSocket serverSocket = new ServerSocket(9889);
		Socket socket = serverSocket.accept();
		
		InputStream is = socket.getInputStream();
		OutputStream os2 = socket.getOutputStream();
		FileOutputStream os = new FileOutputStream("D:\美女.jpg");
		byte[] b = new byte[1024];
		int len = 0;
		while ((len = is.read(b)) != -1) {
			os.write(b , 0 ,len);
			os.flush();
			if (len != 1024) {
				break;
			}
		}
		System.out.println("文上传文件已经写出~");
		os2.write("服务器已经完成".getBytes());
		os2.flush();
		os2.close();
		System.out.println("wan");
		socket.close();
	}
}

3,让客户端与服务器无限制聊天 4,群聊(思考)

经验分享 程序员 微信小程序 职场和发展