2022-08-11 第四组 王佳齐 学习笔记
思维导图

服务器:是一台电脑
客户端:是一台电脑,是手机,是平板,是网页
我们即将在自己的电脑上搭建服务器环境
我们自己的电脑还得是客户端
我们的电脑计算机服务器,又是客户端
Socket编程:建立在TCP/IP协议。
如何在网络环境子啊访问别人的主机
IP地址+端口号访问
查看自己电脑在当前网络环境下的IP地址:上网查
通过指令控制台CMD:ipconfig查看ipv4地址,是当前局域网下的ip
192.168.1.1:8888
8888是端口号
一台电脑可以有好多端口号
每个端口好对应的程序也可以不同
但我们通过ip地址+端口号访问一个指定的程序的时候
Socket通信
开辟端口号,服务器的端口
再构建客户端通过ip地址+端口号访问服务器
Socket通信服务端是一个对象:ServerSocket类
* C/S架构:Client/Server客户端/服务器,QQ,360,腾讯会议,游戏
* B/S架构:Browser/Server浏览器/服务器,
URL:https://www.163.com/,对应着互联网的一个资源网址
URL:https://192.168.1.1:8888/goods
协议 主机名 端口号 资源地址
public class Ch01 { @Test public void server() throws IOException { // 创建了一个服务器对象,绑定在8888端口 ServerSocket serverSocket = new ServerSocket(8888); System.out.println("服务器已启动..."); // 服务器在等待客户端连接 Socket socket = serverSocket.accept(); // 读取客户端发送过来的信息 InputStream inputStream = socket.getInputStream(); byte [] buffer = new byte[1024 * 1024]; int len; while((len = inputStream.read(buffer)) != -1){ System.out.println("服务器已接收客户端的数据:" + new String(buffer,0,len)); } // 释放资源 inputStream.close(); socket.close(); } @Test public void client() throws IOException { // 创建了一个Socket通信的客户端 Socket socket = new Socket(); // 第一个参数就是获取当前电脑的IP地址 // 第二个参数就是服务器的端口号 socket.connect(new InetSocketAddress(InetAddress.getLoopbackAddress(),8888)); // 客户端发送数据给服务器 OutputStream outputStream = socket.getOutputStream(); String data = "hello server!"; outputStream.write(data.getBytes()); System.out.println("客户端已发送数据:" + data); outputStream.close(); socket.close(); } }
public void server() throws IOException { // 创建了一个服务器对象,绑定在8888端口 ServerSocket serverSocket = new ServerSocket(8888); System.out.println("服务器已启动..."); // 服务器在等待客户端连接 Socket socket = serverSocket.accept(); // 读取客户端发送过来的信息 InputStream inputStream = socket.getInputStream(); // InputStream inputStream1 = new FileInputStream(""); OutputStream outputStream = new FileOutputStream("d:/Pointofix.exe"); // 我们要再获取一个输出流,这个输出流是为了给客户端返回数据 OutputStream clientOutputStream = socket.getOutputStream(); byte [] buffer = new byte[1024 * 1024]; int len; while((len = inputStream.read(buffer)) != -1){ // 接收信息,接的是什么信息? // 看输入流是怎么来的? // 我们现在的输入流是怎么来的? // 通过socket获取到的 // socket是怎么来的? // socket是通过服务器启动之后,接到的客户端连接 // 我们的输入流就是客户端的输入流 // 因为我们现在接收的是一个文件 // 我们需要把这个文件另存 // 我们需要构建一个输出流,把这个文件保存在硬盘上 outputStream.write(buffer,0,len); } System.out.println("文件接收成功..."); // 给客户端返回一个数据 clientOutputStream.write("文件已成功保存到服务器...".getBytes()); // 释放资源 inputStream.close(); outputStream.close(); socket.close(); } @Test public void client() throws IOException { // 创建了一个Socket通信的客户端 Socket socket = new Socket(); // 第一个参数就是获取当前电脑的IP地址 // 第二个参数就是服务器的端口号 socket.connect(new InetSocketAddress(InetAddress.getLoopbackAddress(),8888)); // 客户端发送数据给服务器 OutputStream outputStream = socket.getOutputStream(); File file = new File("e:/Pointofix.exe"); InputStream inputStream = new FileInputStream(file); // 我们现在要读取的是服务器的数据,就需要构建一个从服务器来的输入流 InputStream serverInputStream = socket.getInputStream(); // 要发送的文件 byte [] buf = new byte[1024 * 1024]; int len; while((len = inputStream.read(buf)) != -1){ // 把读取到的文件循环发送给服务器 // 输出流把文件写出去,写到哪里去了? // 输出流,首先要看这个输出流是怎么来的,就能够确定这个内容要输出到哪里? // 我们现在的输出流是通过socket获取到的 // 所以说我们现在的写的操作就是把文件写给服务端 outputStream.write(buf,0,len); } System.out.println("文件发送成功..."); // 要通知服务器文件已发送完毕,下面的操作是等待服务器的回复 // 通知服务器数据已经发送完毕 socket.shutdownOutput(); // 接收服务器回传的数据 byte [] serverBuf = new byte[1024 * 1024]; int serverLen; while((serverLen = serverInputStream.read(serverBuf)) != -1){ System.out.println(new String(serverBuf,0,serverLen)); } inputStream.close(); outputStream.close(); socket.close(); }
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号