dijiuzu

 

20220811 第一组 于芮 网络通信(第三十天)

 

小白成长记——第三十天

 

   今天主要的学习内容是利用socket和IO流进行网络通信,相比较来说是java基础中比较容易理解的知识,只要前面都跟上了,这里自然不会很难理解java基础就快要结束了,学习的知识也很多,最后还是要融会贯通,将所有知识结合在一起,来看一下今天的学习笔记吧!

网络编程(网络通信)
服务器:是一台电脑
客户端:是一台电脑,手机,网页
socket编程
是建立在tcp/ip协议上
如何在网络环境下访问其他的电脑?
通过IP地址加端口号,可以访问其他的主机
如何查看在当前网络下的IP地址?
命令提示行(cmd)ipconfig查看Ipv4的IP地址,当前局域网下的IP地址
端口号:一台电脑有多个端口号,每个端口号对应的程序也可以不同,当通过IP地址和端口号访问一个指定的应用程序
如何构建socket通信服务器
seversocket创建对象
@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();
}
URL
URL:https://www.163.com/,对应着互联网的一个资源网址
URL:https://192.168.1.1:8888/goods
协议 主机名 端口号 资源地址
C/S架构:Client/Server客户端/服务器,QQ,360,腾讯会议,游戏
B/S架构:Browser/Server浏览器/服务器,
移动互联,手机端为主,C/S架构,
Java主要要做的就是架构中的Server端。
1.静态资源:所有用户访问后,得到的结果都是一样的。html
2.动态资源:每个用户访问后,得到的结果可能不一样。爱奇艺,
web服务器。
接收用户的请求,处理请求,给出响应。
通过浏览器访问我们的ServerSocket服务器,我们通过浏览器给我们的ServerSocket服务器发起了请求
我要访问服务器!!!
通过IP地址 + 端口号
本机的IP地址:
1.cmd---ipconfig
2.127.0.0.1---本机(个人建议,任何情况都好使)
3.localhost---本机(前提条件:你的电脑要联网,激活一下网卡)
127.0.0.1:8080
我们通过浏览器访问我们的ServerSocket,得到了一堆信息,看不懂。
其实发送过来的信息,报文。浏览器传递过来的一些消息。
User-Agent:告诉服务器我是从什么样的客户端来的。
Host: 127.0.0.1:8080,主机地址,目标主机。
貌似浏览器也是通过Socket和我们的服务器建立了TCP连接
我们不妨把浏览器给我们的服务器发送的信息称之为“请求”,
而且这个请求格式满足了http的协议。
请求:客户端--->服务器响应:服务器--->客户端

   今天的学习内容就是这些了,通过一些实践将网络通信的含义理解的更加深刻,辣妈看一下今天的的代码实现吧!

 1 package J0811;
 2 
 3 import org.junit.jupiter.api.Test;
 4 
 5 import java.io.*;
 6 import java.net.InetAddress;
 7 import java.net.InetSocketAddress;
 8 import java.net.ServerSocket;
 9 import java.net.Socket;
10 
11 public class Ch03 {
12     @Test
13     public void sever() throws IOException {
14         //创建服务器对象,绑定在8888端口
15         ServerSocket serverSocket=new ServerSocket(8888);
16         System.out.println("服务器已启动");
17         //服务器在等待客户端连接
18         Socket socket=serverSocket.accept();
19         //读取客户端发送过来的信息
20         InputStream inputStream=socket.getInputStream();
21         OutputStream outputStream=new FileOutputStream("");
22         //在获取一个输出流,给客户端返回数据
23         OutputStream clientOutputStream=socket.getOutputStream();
24         byte[] buffer=new byte[1024*1024];
25         int len;
26         while ((len=inputStream.read(buffer))!=-1){
27             /*
28             * 接受信息
29             * 看输入流怎么来的
30             * 通过socket获取
31             * socket怎么来的
32             * socket是通过服务器启动之后,接到了客户端的连接
33             * 蜀门的输入流是客户端的输入流
34             * 现在接收的是一个文件
35             * 需要把这个文件另存
36             * 需要构建一个输出流,把这个文件保存在硬盘上
37             * */
38             outputStream.write(buffer,0,len);
39         }
40         System.out.println("文件接收成功");
41         //给客户端返回一个数据
42         clientOutputStream.write("文件已成功保存到服务器".getBytes());
43         //释放资源
44         inputStream.close();
45         outputStream.close();
46         socket.close();
47 
48     }
49     @Test
50     public void client() throws IOException {
51         //创建一个socket通信的客户端
52         Socket socket=new Socket();
53         //第一个参数就是获取当前电脑的IP地址
54         //第二个参数就是服务器的端口号
55         socket.connect(new InetSocketAddress(InetAddress.getLoopbackAddress(),8888));
56         //客户端发送数据个服务器
57         OutputStream outputStream=socket.getOutputStream();
58         File file =new File("");
59         //要读取服务器的数据,需要构建一个从服务器来的输入流
60         InputStream inputStream=new FileInputStream("");
61         //要发送的文件
62         byte[] buf=new byte[1024*1024];
63         int len;
64         while ((len=inputStream.read(buf))!=-1){
65             /*
66             * 读取到的文件循环发送给服务器
67             * 输出流把文件写出去,通过搜下可以获取到的,现在写的操作就是文件写给服务端
68             * */
69             outputStream.write(buf,0,len);
70         }
71         System.out.println("文件发送成功");
72         //通知服务器发送完毕,等待服务器回复
73         //通知服务器发送完毕
74         socket.shutdownInput();
75         //接受服务器回传的数据
76         byte []serverBuf=new byte[1024*1024];
77         int serverlen;
78         while ((serverlen=inputStream.read(buf))!=-1){
79             System.out.println(new String(serverBuf,0,serverlen));
80         }
81         inputStream.close();
82         outputStream.close();
83         socket.close();
84     }
85 }
 1 package J0811;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 
 8 public class Ch06 {
 9     public static void main(String[] args) throws IOException {
10         ServerSocket serverSocket=new ServerSocket(8080);
11         //等待客户端的连接
12         Socket accept=serverSocket.accept();
13         //获取一个输入流来读取客户端发送来的数据
14         InputStream inputStream=accept.getInputStream();
15         byte[] buf=new byte[1024];
16         int len;
17         while((len=inputStream.read(buf))!=-1){
18             System.out.println(new String(buf,0,len));
19         }
20         inputStream.close();
21         accept.close();
22     }
23 }

 

posted on 2022-08-11 21:32  于芮  阅读(18)  评论(0编辑  收藏  举报

导航